[Japring-Study 9] spring-data-jpa-2

Kim yohan·2024년 8월 18일

JapringStudy

목록 보기
9/12
post-thumbnail

이번에는 JPA의 다양한 연관관계들에 대해서 배웠다!


XToOne

@ManyToOne, @OneToOne은 fetchType이 default로 EAGER이다!
그래서, 해당 엔티티를 조회할 때 연관된 엔티티들이 join으로 엮이게 된다.

@ManyToOne의 경우, JPQL을 사용하면, 엔티티와 연관된 엔티티들을 모두 조회하긴 하지만, SELECT 문이 여러번 나가서 N+1 문제가 발생할 수 있다. 이 때, fetch join을 사용해야한다.



OneToMany

fetchType이 default로 LAZY이다.
그래서, 엔티티 조회시 해당 엔티티만 조회하고, 연관된 엔티티들이 join되지 않는다.

@OneToMany 단방향 사용은 실무에서 금지된다고 한다!
이유는 One쪽을 수정했는데, 다른 쪽의 조인이나 업데이트 쿼리가 발생하기 때문이다.
One쪽 엔티티를 수정했을 때, 해당 엔티티가 Many쪽 key를 모르기 때문에, 추가로 조인이나 업데이트 쿼리가 발생한다.
쓸거면 @ManyToOne을 사용하자.

@OneToOne은 @ManyToOne과 다르게 fetch 설정을 해주지 않아도 join이 포함되는 이유



ManyToMany

다대다 관계는 데이터베이스 스키마에서 나타내기 힘들기 때문에, 중간에 연결 테이블을 두어서, 다대일, 일대다 관계로 풀어낸다.

profile
꾸준히 성실하게

0개의 댓글