스프링 JPA의 사실과 오해

김민지·2022년 11월 17일
0

JPA

목록 보기
21/27

일대다 관계를 쓰면 안되는 이유

다대일관계의 Team과 Member가 있다. 그리고 이들을 cascade설정해두고
Team1, Member1,Member2가 있고 이들을 모두 묶은다음에 저장한다
그러면 3개의 insert쿼리가 나간다 (예상대로다)
하지만 일대다관계에서 똑같은 상황이라면 더 많은 쿼리가 나가게된다.
업데이트쿼리가 나가게된다

왜 update쿼리가 나갈까?

https://wwlee94.github.io/category/blog/spring-jpa-one-to-many-save-issue/

정리

일대다 단방향 관계에서 엔티티 save시 update쿼리가 추가로 발생
예를들어 team entity에 members라는 멤버변수가 있다고 가정하자
-> 일대다 라는것은 일단 다쪽에 fk가 있는것은 맞지만 엔티티에서 일쪽에 다에대한 변수만 있는 경우를 말한다.
그리고 members를 임의로 생성해서 team과 연관관계를 맺어준 뒤에 team을 저장한다고 하자.
결국은 member 엔티티에 team_id컬럼이 추가되겠지만
단방향이어서 entity상에서는 member는 team의 존재를 모른다
그래서 team_id가 없는 채로 member 는 insert되고, 디비에 저장된 후 update를 통해서 team_id를 추가한다

  • 단방향 -> 양방향으로 바꿔주면 update쿼리가 추가로 나가는 문제가 해결된다

출처
https://www.youtube.com/watch?v=rYj8PLIE6-k

https://wwlee94.github.io/category/blog/spring-jpa-one-to-many-save-issue/

profile
안녕하세요!

0개의 댓글