일대다 다대일 연관관계 매핑 메모 정리

김명후·2023년 2월 1일
0

복습을 안하니까 헷갈리기 시작한다.

두 테이블 간의 연관관계를 만들 때, 외래키를 갖고 있는 테이블은 두 연관관계의 주인이 된다.

연관관계의 주인이 되면, 조회 기능 외에 삭제, 수정 등 레코드를 변경할 수 있는 권한을 가진다.

연관관계의 주인인 테이블은 외래키를 가지고 있어야 하므로

  • 주인이 아닌 테이블은 @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번이다.

0개의 댓글