241125 JPA 1:N 연관관계

물고기가자라면어그로·2024년 11월 25일
0

프로젝트가 끝나고서야 블로그를 작성할 시간이 조금 생기는 것 같다..
어제 새벽 3시반 까지 발표준비를 하다 잠들고 오늘 드디어 오후 2시에 발표회를 마치고 조금 쉰 것 같다.

프로젝트를 진행하며 조금 헷갈렸던 JPA의 1:N 연관관계 설정에 대한 얘기를 해보겠다.

나같은 경우에는 유저가 삭제되면 유저가 작성한 게시글, 댓글 등이 한 번에 삭제되는 기능을 구현하고 싶었는데 이를 위해 1:N 연관관계를 맺어 양방향으로 관계를 맺어주어야했다.

N:1 연관관계를 맺고 싶을 때 엔티티에 필드 설정을 다음과 같은 어노테이션으로 한다면

    @ManyToOne
    @JoinColumn(name = "외래키 칼럼명")
    private 테이블을담을Entity 변수명;

1:N 연관관계를 맺고 싶을 때는 엔티티 필드 설정을 다음과 같이 한다.

    @OneToMany(mappedBy = "상대 Entity Join될 필드명")
	private List<상대Entity> 변수명;

처음에는 이 mappedBy 에 본인 테이블명을 적는 것인 줄 알았는데 그것이 아니라 상대쪽 (N:1) 에서 joinColumn된 필드명을 가져오는 것이었다.

예를 들어서 N:1 연관관계로 양방향 연관관계를 맺을 테이블의 칼럼에 대한 필드가 다음과 같이 작성되었다면

@Setter
@ManyToOne
@JoinColumn(name = "following_id")
Private User following;

이면 @OneToMany(mappedBy = following) 으로 적는것이다.

이 때, @JoinColumn(name="") 이 들어가는 필드가 있는 엔티티는 연관관계의 주인이 되는 쪽이고 (mappedBy = ?)가 들어가는 쪽은 연관관계의 주인이 아닌 쪽으로 외래키 관리의 책임을 지고 있지 않다.

헷갈리는 내용이니 주의해야겠다.

0개의 댓글

관련 채용 정보