Mysql sql_mode=only_full_group_by 에러

정명진·2023년 7월 11일
1
post-custom-banner

프론트 개발자에게 갑자기 뷰 조회가 안된다는 문의가 왔다.

뭐지? 분명 로컬에세 테스트 다 하고 올렸는데?? 그래서 에러 로그를 확인해보니 다음과 같은 문구가 찍혀있었다.

* GROUP BY 쿼리 에러  
Expression  of SELECT list is not in GROUP BY clause and contains
nonaggregated column  which is not functionally dependent on columnsin GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

해당 문제는 mysql 5.7이상 버전부터 발생하는 문제였다. 즉 querydsl의 문제가 아니였음. 즉 mysql 설정을 변경하거나 group by에 칼럼을 모두 넣으면 해결 가능하다고 한다.

그래서 설정을 바꾸기보단 querydsl 쿼리문을 변경하기로 했다.

#before
return jpaQueryFactory.select(QQdslHashTagViewDTO(
            contentJpaEntity.id,
            thumbnailImageJpaEntity.imageUrl,
            contentJpaEntity.name,
            contentJpaEntity.memo,
        )).from(contentJpaEntity)
            .leftJoin(contentHashTagJpaEntity).on(contentJpaEntity.eq(contentHashTagJpaEntity.content))
            .leftJoin(hashTagJpaEntity).on(hashTagJpaEntity.eq(contentHashTagJpaEntity.hashTag))
            .leftJoin(thumbnailImageJpaEntity).on(contentJpaEntity.eq(thumbnailImageJpaEntity.content))
            .fetchJoin()
            .where(contentJpaEntity.user.id.eq(userId), tagEq(tag))
            .orderBy(*getSort(sort))
            .groupBy(contentJpaEntity.id, thumbnailImageJpaEntity.imageUrl, contentJpaEntity.name, contentJpaEntity.memo)
            .offset(pageable.offset)
            .limit(pageable.pageSize.toLong())
            .fetch().map { it.convertToCoreDTO() }

groupBy(contentJpaEntity.id, thumbnailImageJpaEntity.imageUrl, contentJpaEntity.name, contentJpaEntity.memo)

groupBy에 모든 칼럼을 넣으면서 문제 해결 완료!

profile
개발자로 입사했지만 정체성을 잃어가는중... 다시 준비 시작이다..
post-custom-banner

0개의 댓글