안녕하세요 질문드립니다.
140
작성한 질문수 3
안녕하세요. 영한님 덕분에 강의를 시청하고 jpa로 프로젝트를 진행하고있습니다.
현재 "User"객체, "Movie" 객체 그리고 "Score" 객체로
Movie <1 : N> Score <N : 1> User
이런식으로 유저가 영화에 부여한 평점에 대해 관계를 맺고있습니다.
이제 여기서 평점이 특정 점수 이상인 영화목록을 평점과 함께 가져오려고합니다
select
movie0_.content_id as content_2_5_,
movie0_1_.category as category3_5_,
movie0_1_.description as descript4_5_,
movie0_1_.dtype as dtype1_5_,
movie0_1_.main_title as main_tit5_5_,
movie0_1_.image_id as image_id7_5_,
movie0_1_.production_date as producti6_5_,
movie0_.book_rate as book_rat1_11_,
movie0_.country_code as country_2_11_,
movie0_.netflix_yn as netflix_3_11_,
movie0_.watcha_yn as watcha_y4_11_,
movie0_.origin_title as origin_t5_11_,
movie0_.running_time as running_6_11_,
movie0_.total_audience as total_au7_11_
from
movie movie0_
inner join
content movie0_1_
on movie0_.content_id=movie0_1_.content_id
where
(
select
avg(score1_.score)
from
score score1_
where
movie0_.content_id=score1_.content_id
)>=4.0 limit ?
대충 이런 쿼리로 생각하고있습니다.
근데 점수(score)를 중간 테이블로 분리하다보니 이걸 dto에 맵핑하는 과정에 좀 고민되는 부분이 있습니다.
Movie 엔티티에 averageScore라는 컬럼을 넣을순없으니 이걸 어떻게 해야하나 싶은데
1. jpql로 순수한 Movie엔티티를 먼저조회하고 그 정보를 가지고 영화들의 평균점수를 조회한뒤 합친다.
이렇게하면 영화조회할때 avg(score) 비교연산 하는부분의 서브쿼리를 평균점수 조회때 한번 더 돌려야합니다.
그리고 가져온뒤 pk값으로 맵핑을 일일이해줘야하는데 jpa가 해야할일을 제가하는 느낌입니다.
2. jpql로 애초에 DTO로 맵핑하게끔해서 한번의 조회로 끝낸다.
근데 뭔가 jpql에서 바로 DTO로 조회하는게 탐탁치않습니다.
3. 네이티브쿼리를 쓴다.
제일 간단한 방법인데 사실상 2번 방법이랑 비슷한거 같네요.
어떤게 가장 jpa스러운 해결방법인지, 사실 위에 3개다 별로인거같아서 여쭤봅니다.
감사합니다.
답변 1
0
안녕하세요. kd park님
집계나 통계성 쿼리 같은 경우에는 순수한 엔티티로 조회하기가 쉽지 않습니다. 그리고 그게 꼭 올바른 방향도 아니구요.
집계나 통계성 쿼리는 이미 엔티티를 한번 가공해서 다른 데이터로 변해버린 데이터입니다. 따라서 DTO로 조회하는 것이 더 나은 선택일 확율이 높습니다.
선택하는데 도움이 되셨길 바래요^^
강의 관련 외 질문입니다.
0
64
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
85
1
BeanCreationException
0
86
3
Update 후 UpdateMemberResponse 매핑할 때
0
46
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
97
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
81
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
61
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
108
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
83
2
fetch join과 영속화와 OSIV의 관계
0
83
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
55
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
77
2
dto 필드 속 엔티티 여부
0
58
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
85
1
DTO 대신 Form 사용은 안되나요?
0
133
1
OSIV ON 상태일 때
0
95
1
fetch join VS fetch join 페이징 궁금증
0
179
2
양방향 연관관계 알아보는 법?
0
104
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





