JPQL(Querydsl) orderby 에 집계함수
142
작성한 질문수 11
영한님 안녕하세요
강의 잘 듣고 있는데, 서브쿼리를 사용하려다.. where, having절에만 사용가능하기에 이 문제를 어떻게 해결할까 고민하다가 질문드립니다..
<문제>
현재 엔티티는
Post(게시글) 엔티티 필드 : postId, content, createdAt , 조회수,댓글 수, 좋아요 수
Post view(게시글 조회) 엔티티 필드 : postViewId, user,post, 조회수,댓글수,좋아요수
이렇게 있습니다. ( post view 엔티티는 특정 유저그룹이 어떤 게시글을 본 히스토리를 관리하고 그 히스토리를 통해 게시글의 인기도를 측정하기 위함입니다.)
이러한 상황에서 ,
게시글의 조회수, 댓글 수, 좋아요 수, 특정 유저그룹이 해당 게시글을 조회한 수, 특정 유저그룹이 해당 게시글에 댓글 단 수, 특정 유저그룹이 해당 게시글에 좋아요한 수 로 정렬하고, (where 조건 절은 다 구현됐다는 가정)
groupby는 게시글의 pk 로만 하지만, 실제로 dto에 projections.bean()활용해서 매핑할 필드들은 content, createdAt 등 여러가지 컬럼이 추가로 있습니다.
이러한 경우라면, 우선 특정 유저그룹이 해당 게시글에 댓글 단 수, 특정 유저그룹이 해당 게시글에 좋아요한 수로 정렬하려면, 집계함수 sum을 활용해야하기 때문에 orderby절에 집계함수가 써야하고, 그러면 당연히 groupby를 써야하는데 이 때, post의 모든 필드들로 groupby 하는 것보다 pk로만 group by하는게 의미 있다고 생각해서 select 절에는 select postId 만 올 수 있을텐데
그렇다면 이 postId의 리스트를 받아서 다시 이 postId로 다시 post entity를 조회해서 나머지 content, createdAt 값을 받는것이 최선일까요?(이 방법도 그런데 정렬이 유지되지않아서 결국 다시 집계함수로 정렬해야만할까요?) 이렇게 하면 두 번 쿼리를 날리기 때문에 별로 좋지 않은 방법이지 않을까라는 생각이 들지만 jpa는 from 절 서브쿼리를 지원하지않고, 다른 방법이 떠오르지 않아 여쭤봅니다.
조금 중구난방으로 질문한 감이 없지 않아 있지만..
영한님 답변 부탁드립니다..ㅠㅠ
답변 1
0
안녕하세요. jayjoy05님
말씀하신 내용을 Querydsl로 작성하기는 쉽지 않을 것 같아요.
대안으로는
JPQL을 사용한다.
하이버네이트가 from절의 서브쿼리를 이제는 지원하는데요.
다음을 참고해주세요.
https://in.relation.to/2022/06/24/hibernate-orm-61-features/
NativeQuery를 사용한다.
정도가 있을 것 같아요.
참고로 모든 것을 JPQL, Querydsl로 해결하려기 보다는 쿼리 자체가 너무 복잡해지면 이런 경우에는 NativeQuery, JdbcTemplate 등도 함께 고려하는 것이 좋습니다.
감사합니다.
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
13
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
27
1
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
66
2
inheritance startegy 선택시 고려사항
0
45
1
Entity 동등성 비교
0
51
1
실무 조언 관련 질문입니다.
0
74
1
H2데이터베이스 파일 생성
0
84
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
71
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
68
1
JPQL 메소드와 락
0
65
1
Delivery @OneToOne
0
78
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
109
2
UnsupportedOperationException 발생
0
113
3
H2 Database 연결이 안됩니다.
0
106
2
연관관계 매핑 질문드립니다.
0
104
2
h2데이터베이스 실행오류
0
124
2
persistence.xml
0
132
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
97
1
영속성 컨텍스트
0
82
1
JPA 프록시
0
112
1
Native Query와 MyBatis
0
88
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
108
1
임베디드 타입 예시 코드 관련 질문
0
134
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
106
3





