Replies: 1 comment 2 replies
-
안녕하세요 세연님 ! 저도 이 부분에 대해서 잘 몰랐던 부분이라 조금 찾아봤는데, 영한님의 답변이 유사해보이는데요, transform + groupby 조합은 결국 memory에서 작업하는 것이기에 메모리 사용량이 증가할 수 있다는 문제가 있는 것 같습니다. |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
문제 상황
querydsl을 사용하던 중, DTO로 바로 매핑하여 데이터를 받기 위해 변환을 하는 도중
groupBy
를 사용하게 되면 그룹화를 합니다.이렇게 되면 group별로 분류된 리스트가 나오게 됩니다.
Member
와Badge
는 일대다 관계이지만, 연관관계 매핑은 되어있지 않습니다.이때 memberId로 grouping을 하게 되면 Badge의 값이 문제가 되는데,
이를 위해 Badge까지 같이 그룹을 하면, 각 리스트에는 하나의 Badge만 들어갈 수 있게 됩니다.
하지만 원하는 데이터는 하나의 ID에 여러 Badge이기 때문에, 쿼리에서의 groupby는 사용하지 않고,
데이터를 가져오면 그 데이터를 java에서 그룹핑하여 데이터를 변환하는 것으로 진행하기 위해
이렇게 진행했습니다.
따라서
transform
을 사용하게 되었는데,queryDsl
에서transform
을 사용하다 보니java.lang.NoSuchMethodError: 'java.lang.Object org.hibernate.ScrollableResults.get(int)
와 같은 에러가 발생을 하였습니다.원인
하이버네이트6.1.5
로 넘어오면서 해당 메서드가 삭제되어서 생기는 문제입니다.Querydsl issue 링크
해결
위와 같이 Template을 DEFAULT로 사용하면서 문제를 해결했습니다.
다만, 이렇게 사용하면
AbstractJpaQurey
의 stream을 사용할 수 없다는 점이 있는데, 아직 사용하지 않고 있고, 사용하더라도 위 링크에 해당 문제에 대해서도 다루고 있어서 문제는 없을 거 같습니다.Beta Was this translation helpful? Give feedback.
All reactions