DevBoi

JPA 연관관계 주인 및 설정 주의사항 본문

Develop/[JPA]

JPA 연관관계 주인 및 설정 주의사항

HiSmith 2021. 8. 27. 00:08
반응형

일단 jpa 관련 예시 소스를 한번 보자

Team과 member에 대한 연관관계를 잘 생각해보자

이런 경우에, Team이 연관관계에 주인이라고 할수있다. 

 

 

이렇게 member에서 가져다가, team에 대한 정보를 update 및 저장 등을 한다고 가정해보자

즉 모든 멤버는 각자 소속된 팀이 있거나, 없다.

 

 

 

 

 

 

이제 Member를 만들고, 이 멤버에 Team을 set해보자

db에는 어떻게 담기게될까??

 

 

Member의 Team을 set하였고, 해당 Member를 set, persist를 하게되면, 저렇게 db에 담기게된다.

그런데, 만약에 한 로직에서, flush가 되지않고, 1차 캐시에 값이 남아있는 상태로 find하게되면?

add되지않은 상태에서, 값이 find 될 경우가 있다. (트랜잭션 관리)

 

따라서, 해당 양방향 매핑 시에는, 두가지의 객체에 전부값을 add해줄 필요가 있다.

setTeam -> changeTeam으로 변경 및 값을 두개다 정리해보자

 

 

또한가지 주의사항 무한 루프!!

api로 명세를 할때, 대부분 to String 메소드를 많이 쓰는데 

만약에 양방향 관계일때 각자 객체에서 toString으로 find를 하게되면 무한 루프를 초래하여, 오류가 난다. 스택 오버 플로우

json 이던 뭐던 find를 거치는 것들에 대한건,,, 이렇게 하면 안된다.

Entity의 연관관계가 양방향일때, 이런 장애상황을 조심해야한다.

 

방어 대책은 하나이다.

DTO로 변경해서, return 하는 것이 중요하다. 객체 자체, 즉 entity자체를 반환하지말자.

 

단방향 매핑으로 설계를 끝내자, 사실 양방향은 역으로 단방향의 조회기능이 추가된것이다.

만약에, 필요한 경우 신중히 설계를 하고, 실제 실무에서는 이미 jpql로 역으로 탐색하는 기능을 많이 사용한다.

실제로 단순 조회에 대한 걸 실무에서 사용하는 케이스는 잘없으니 ㅎㅎ 

 

 

그리고 연관관계의 주인은, 외래키의 위치 기준으로 잡아주자!!

이게 진짜 핵심이다.

 

반응형

'Develop > [JPA]' 카테고리의 다른 글

[JPA] 다양한 연관관계 매핑 실습해보기  (0) 2021.12.13
연관관계 매핑 예제 공부 및 실습  (0) 2021.09.17
JPA 관련 h2연동  (0) 2021.08.17
[JPA] 연관관계 매핑  (0) 2021.07.30
[JPA] Entity Mapping, Table Managing  (0) 2021.07.28