(자바ORM) 양방향 매핑의 규칙

* 양방향 연관관계 매핑 시 지켜야 할 규칙이 있는데 두 연관관계 중 하나를 연관관계의 주인으로 정해야 한다.

연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래키를 관리(등록, 수정, 삭제) 할 수 있다. 반면에 주인이 아닌 쪽은 읽기만 할 수 있다.

어떤연관관계를 주인으로 정할지는 mappedby 속성을 사용하면 된다.


  • 주인은 mappedby 속성을 사용하지 않는다.
  • 주인이 아니면 mappedby속성을 사용해서 속성의 값으로 연관관계의 주인을 지정해야 한다.


< 연관관계의 주인은 외래 키가 있는 곳>


예를들어) 회원과 팀 두 테이블의 관계에서 회원이 team이라는 객체를 참조하고 이것이 외래키이므로 이때 주인은 회원으로 한다.
대신 팀 테이블에서 List<Member> members; 에다가 @OneToMany(mappedby="team")을 해주어 자신이 주인이 아님을 표시한다.



< 양방향 연관관계의 주의점 >

양방향 연관관계를 설정하고 가장 흔히 하는 실수는 연관관계의 주인에는 값을 입력하지 않고, 주인이 아닌 곳에만 값을 입력하는 것이다. 데이터베이스에 외래 키 값이 정상적으로 저장되지 않으면 이것을 의심해보자.




*MappedBy에 대한 설명

->MappedBy signals hibernate that the key for the relationship is on the other side.
This means that although you link 2 tables together, only 1 of those tables has a foreign key constraint to the other one. MappedBy allows you to still link from the table not containing the constraint to the other table



* 양방향은 외래 키가 있는 쪽인 연관관계의 주인이다.
-> 일대다와 다대일 연관관계는 항상 다(N)에 외래키가 있다. JPA는 외래 키를 관리할 때, 연관관계의 주인만 사용한다. 주인이 아닌 곳은 조회를 위한 탐색을 할때만 사용한다.

*일대다 단방향 관계를 매핑할 때는 @JoinColumn을 명시해야 한다. 그렇지 않으면 JPA는 연결 테이블을 중간에 두고 연관관계를 관리하는 조인테이블 전략을 기본으로 사용해서 매핑한다.

댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬