@OneToMany, @ManyToOne 어노테이션은 1:n과 n:1 관계를 설정하는 어노테이션이다.
오늘 comment 기능을 구현하며 cardId를 불러와야 했는데,
이 어노테이션을 잊고 있다가 어떻게 구현하지... 라며 한참의 시간을 소비했다.
연관관계는 아래와 같다
1:1 / @OneToOne
1:N / @OneToMany
N:1 / @ManyToOne
N:M / @ManyToMany
N:M 연관관계는 RDB에서 일반적인 방법으로 표현할 수 없어 중간 테이블이 생긴다.
따로 중간 Entity(table)을 만들어서 1:N, N:1 관계로 분해해야 하기에 잘 사용되지 않는다.
@OneToMany
단방향: 상대 엔티티에 @ManyToOne이 없는 경우
양방향: 상대 엔티티에 @ManyToOne이 있는 경우
@ManyToOne
단방향 : 상대 엔티티에 @OneToMany가 없는 경우
양방향 : 상대 엔티티에 @OneToMany가 있는 경우
@OneToMany 양방향과 @ManyToOne 양방향은 기준이 다를 뿐 차이가 없다.
★단방향이든, 양방향이든 @OneToMany 어노테이션을 달고 있는 엔티티가 부모 엔티티가 된다.★
FK (Foreign Key)를 들고 있는 쪽이 자식 엔티티가 된다.
연관관계에는 주인이라는 개념이 있다.
주인은 연관관계의 관리 주체를 뜻하는데
주인 엔티티와 부모 엔티티는 다르다.
부모, 자식 엔티티는 의존도를 통해 정해지며,
주인 엔티티는 DB에 저장되는 FK를 어떤 엔티티가 CUD를 담당하는지에 따라 정해진다.
단방향의 경우 주인은 어노테이션이 존재하는 엔티티가 되는데
양방향의 경우 OneToMany, ManyToOne 의 "Many"가 주인이 되는 것이 자연스럽다.