복습을 안하니까 헷갈리기 시작한다.
두 테이블 간의 연관관계를 만들 때, 외래키를 갖고 있는 테이블은 두 연관관계의 주인이 된다.
연관관계의 주인이 되면, 조회 기능 외에 삭제, 수정 등 레코드를 변경할 수 있는 권한을 가진다.
연관관계의 주인인 테이블은 외래키를 가지고 있어야 하므로
@OneToMany(mappedBy = “연관관계 매핑된 다른 클래스 내의 자기 클래스 필드”)
를 설정해준다.@JoinColumn
: 매핑할 외래키를 지정한다.@JoinColumn(name = “member_id”)
라고 적어주면 Member
테이블의 memberId
와 매핑을 시킨다.@Entity
public class Member { // 유저를 일컫는다.
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long memberId;
@OneToMany(mappedBy = "member")
private List<Comment> comments = new ArrayList()<>;
@OneToMany(mappedBy = "member")
private List<Post> posts = new ArrayList<>();
}
@Entity
public class Comment { // 댓글을 일컫는다.
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_id")
private Long commentId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_Id") //member 테이블과 조인하는데 어떤 속성과 join을 할건지?
private Member member;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_Id")
private Post post;
}
@Entity
public class Post { // 게시판을 일컫는다.
@Id @GeneratedValue
@Column(name = "post_id")
private Long postId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
@OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE)
private List<Comment> Comments = new ArrayList<>();
}
가장 헷갈려했던 부분.. 정답은 3번이다.