twocowsong

정리 본문

IT/JPA

정리

WsCode 2022. 6. 9. 21:30

엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야합니다.

- 다중성

- 단방향, 양방향

- 연관관계의 주인

 

먼저 연관관계가 있는 두 엔티티가 1 : 1 인지 1 : N 관계인지 다중성을 고려해야합니다.

다음으로 두 엔티티 중 한쪽만 참조하는 단방향인지 양방향인지 고려해야합니다.

마지막으로 양방향 관계면 연관관계의 주인을 정해야 합니다.

 

다중성

연관관계에는 다음과 같은 다중성이 있습니다.

- N : 1

- 1 : N

- 1 : 1

- N : M

 

다중성을 판단하기 어려울 때는 반대방향을 생각해보면 됩니다.

1 : N의 반대방향은 항상 N : 1이고, 1 : 1의 반대방향은 항상 1 : 1입니다.

보통 N : 1과 1 : N 관계를 가장 많이 사용하고 N : M관계는 실무에서 거의 사용하지 않습니다.

 

 

단방향, 양방향

테이블은 외래 키 하나로 조인을 사용해서 양방향으로 쿼리가 가능하므로 사실 방향이라는 개념이 없습니다.

반면 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있습니다.

객체 관계에는 한 쪽만 참조하는 것을 단방향 관계라 하고, 양쪽이 서로 참조하는것을 양방향 관계라 합니다.

 

연관관계의 주인

개인적인 경험으로는 연관관계의 주인을 알고 난뒤 mappedBy를 설정하는데 어려움이 있었습니다.

DB는 외래 키 하나로 두 테이블이 연관관계를 맺습니다.

따라서 테이블의 연관관계를 관리하는 포인트는 외래 키 하나입니다.

 

반면에 엔티티를 양방향으로 매핑하면 A ➔ B , B ➔ A 2곳에서 서로를 참조합니다.

따라서 객체의 연관관계를 관리하는 포인트는 일단은 2곳입니다.

JPA는 두 객체 연관관계중 하나를 정해서 DB 외래키를 관리합니다.

이것을 연관관계의 주인이라고 합니다.

 

A ➔ B 또는 B ➔ A 둘 중 하나를 정해서 외래키를 관리해야 합니다.

외래 키를 가진 테이블과 매핑한 엔티티가 외래키를 관리하는게 효율적이므로 보통 이곳을 주인으로 선택합니다.

주인이 아닌 방향은 외래 키를 변경할 수 없고 읽기만 가능합니다.

 

연관관계의 주인은 mappedBy속성을 사용하지 않습니다.

연관관계의 주인이 아니면 mappedBy속성을 사용하고 연관관계의 주인 필드 이름을 값으로 입력해야합니다.

 

다중성, 단방향, 양방향을 고려한 가능한 모든 연관관계를 알아보기전

마지막으로 소스코드로 정리하겠습니다.

'IT > JPA' 카테고리의 다른 글

다 대 일  (0) 2022.06.12
연관관계의 주인(mappedBy)  (0) 2022.06.11
실전 예제  (0) 2022.06.07
양방향 연관관계의 주의점  (0) 2022.06.06
양방향 연관관계 저장  (0) 2022.06.05