본문 바로가기

스프링

[JPA] 테이블 관계 매핑

 

 

 

 

외래키를 갖는 테이블 : 1대 다의 경우 자식 테이블에서 갖는다. 자식테이블이 연관관계의 주인이 된다. 여기선 book엔티티가 카테고리 하나에 포함되기 때문에 book이 주인

 

 

단방향은 한 쪽의 엔티티가 상대 엔티티를 참조하고 있는 상태

그래서 주인이되는(ForeignKey가 있는) Book 엔티티에만 @ManyToOne 어노테이션을 추가.

* 엔티티 자신을 기준으로 다중성을 생각해야한다.

@JoinColumn(name="category_no")

@JoinColumn 어노테이션은 외래 키를 매핑 할 때 사용.

name 속성에는 매핑 할 실제 데이터베이스의 외래 키명을 지정.

 

 

 

 

OnetoMany 양방향

mappedBy속성은 주인이 아님(foreign key가 없음)을 JPA에게 알려준다.  여기서 "category"는 Book 엔티티에서

 

Category를 참조할 때 작성한 필드명

또한 book은 1:다 관계이므로 여러개이므로 List(Set, ArrayList) 등이 쓰인다.

이렇게 하면 양방향 관계가 맺어진다.

 

 

 

 

@OneToOne 단방향

주인인(외래키를 포함한) 테이블에 들어감.

 

@OneToOne 양방향

mappedBy 외래키가 없는 주인이 아닌 엔티티에 들어감. blog는 해당엔티티필드값

 

@ManyToMany는 매핑테이블을 하이버네이트가 직접 생성한다. 따라서 매핑테이블을 생성해서 1대다관계로 생성하여 작성해도 된다.