sm 기술 블로그
[JPA] sql문으로 변환 본문
JPA 에서 기본 @query 는 JPQL을 사용한다.
"select t from test t"
다음과 같다.
하지만 SQL문이 편한 사람이 있을 것이다.
이때
nativeQuery=true
을 사용해주면 간단히 해결된다.
예를 들어 JPQL을 쓰면서 from에서 서브쿼리를 사용하고 할 때, 제대로 작동하지 않는다.
따라서 JPQL을 sql로 변환하여 사용해보자.
@Query(value = "SELECT * FROM (" +
" SELECT * FROM `talk`" +
" WHERE talkroom_id LIKE %:s% ORDER BY id DESC" +
" LIMIT 18446744073709551615" +
" ) a" +
" GROUP BY talkroom_id" , nativeQuery=true)
List<TalkSetting> findByIdExsits(@Param("s") String s);
다음과 같이 사용하면 SQL에서 작성하는 것과 똑같은 결과물을 얻을 수 있다.
LIMIT 18446744073709551615 의미
SQL Standard에서 규정한 DB Table은 데이터의 순서가 의미를 갖는 것이 아니기 때문에 서브 쿼리를 실행한다고 하여도 데이터의 본질적인 구조와 정렬이 변하지 않는다.
하지만, LIMIT를 걸어줄 경우 데이터의 순서 뿐만 아니라 데이터의 갯수까지도 제한되기 때문에 테이블 내 데이터의 본질적인 내용이 변경되어서 서브 쿼리의 결과 즉, group by의 대상이 되는 결과가 원하는 바 대로 설정되는 것이다.
'스프링부트' 카테고리의 다른 글
[스프링 부트] SpringBoot API Docs (0) | 2022.09.24 |
---|---|
[Thymeleaf] Option 저장 및 출력 (0) | 2022.09.23 |
[스프링부트/jpa] 기본키(pk) 매핑 방법 및 생성 전략 (0) | 2022.09.17 |
[스프링부트 + 리액트] websocket 구현 (0) | 2022.09.15 |
[스프링부트] Websocket(stomp) 구현 (0) | 2022.09.14 |
Comments