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
Uh oh!
There was an error while loading. Please reload this page.
-
문제 상황
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