SQL

    [QueryDsl] transform GroupBy

    요즘 querydsl에서 굉장히 유용하게 사용하고 있는 기능이 있는데, 바로 transform이다. document import static com.querydsl.core.group.GroupBy.*; Map results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(list(comment))); 다음과 같이 querydsl에선 결과 값을 불러온 후 메모리에서 원하는 자료형으로 변환할 수 있는 기능을 제공한다. 함수 이름이 groupBy 라고 해서 sql의 group by와 혼동될 수 있는데, query에서 group by를 사용하지 않는다. 대신 aggregation에 필요한 ..

    [JPA] JPQL, QueryDsl, Spring Data의 exists

    queryDsl의 exists 이슈에 대해서 알게된 계기가 있었는데, 바로 [우아콘2020] 수십억건에서 QUERYDSL 사용하기 이다. @Override public boolean exists(Predicate predicate) { return createQuery(predicate).fetchCount() > 0; } 기존 queryDsl에서 exists 함수를 사용하게 되면 내부적으로 count 함수, 정확히는 fetchCount 함수를 실행하여 반환하게 된다는 이야기이다. fetchCount는 exists query를 발생시키지 않고 count query를 발생시킨다. exists는 첫번째 결과 값을 만나면 반환하는 반면 count 함수는 전체 결과 값을 조회해야 하기 때문에 성능 이슈가 발생하..