JPA

JPA - 연관관계 Insert Query 줄이기

jaewoo 2022. 12. 19. 14:05

영화 프로젝트를 하면서 연관관계에 대해 insert를 하는도중 이상함을 느껴 찾아보다가 이상함을 느껴 글을 작성하게 되었다.

 

좋아요 엔티티는(Like는 예약어라 LikeGood으로 변경했다) 

여기서 보면 boxOffice와 member와 ManyToOne으로 연관관계를 맺고있다. 근데 여기서 만약 insert를 해야한다면..?

 

....?

 

 

!??!

 

insert 쿼리 한번 하기 위해 연관관계로 되어있는 엔티티들을 영속성컨텍스트에 불러와 저장하는 상태가 되어버렸다.

하지만 DB에 정작 들어가는 값은 엔티티에 PK이다. JPA에서는 객체이지만 DB에서는 PK값만 들어가서 이 부분에서 쿼리를 줄일 수 없을까 찾아봤다.

 

좋아요 기능은 회원(Member) 그리고 영화(BoxOffcie) 엔티티가 각각 OneToMany 관계를 맺어 다대다가 가능하도록 구현했다. 

ERD에서 보듯 찜한 영화도 좋아요와 마찬가지로 비슷한 연관관계를 가진다. 그래서 여기서 쿼리를 줄이는 상태를 본다면

 

연관관계의 FK를 생성하고 그 컬럼이름과 같은 필드를 만든다. 그러면 새로운 컬럼이 생성되지 않고 영속성객체를 불러오지 않아도 된다. 대신 FK 참조 필드에는 insertable, updatable을 모두 false로 해야한다.

 

저장하기

insert쿼리가 성공적으로 한번만 일어나는 걸 알 수 있다.

'JPA' 카테고리의 다른 글

JPA - Querydsl로 max값 뽑기  (0) 2023.05.04
JPA - fetchJoin, Inner join  (0) 2023.03.03
Redis - 개념 및 Spring에서 사용  (1) 2023.01.25
JPA - JPQL ORDER BY  (0) 2023.01.17