현실 세계의 데이터는 단일 테이블로 끝나지 않습니다. 회원 1명은 게시글 N개를 쓸 수 있고(1:N), 학생 N명은 수업 N개를 들을 수 있습니다(N:M). JPA는 객체 지향적인 방식으로 이러한 관계를 설정할 수 있게 해줍니다.
| 어노테이션 및 속성 | 설명 |
|---|---|
@ManyToOne |
다대일(N:1) 관계를 매핑합니다. 보통 게시글(N)이 회원(1)을 참조할 때 사용하며, 이 어노테이션이 있는 곳이 연관관계의 주인이 됩니다. |
@OneToMany |
일대다(1:N) 관계를 매핑합니다. 회원(1)이 여러 게시글(N)을 가질 때 사용합니다. |
@JoinColumn |
실제 데이터베이스 테이블에 생성될 외래 키(Foreign Key) 컬럼의 이름을 지정합니다. (예: member_id) |
mappedBy |
양방향 매핑 시, 연관관계의 주인이 아님을 명시합니다. 반대쪽 엔티티의 변수명을 적어줍니다. |
양방향 연관관계를 맺을 때, DB 테이블에 실제 외래 키(FK)를 가지고 있는 쪽이 주인이 됩니다. 따라서 @ManyToOne이 있는 쪽(예: Post)이 주인이 되며, 반대쪽(예: Member)은 읽기 전용 거울 역할만 하도록 mappedBy 속성을 반드시 적어주어야 합니다.