본문 바로가기

개발/JPA

[JPA] @Query 어노테이션을 이용하여 nativeQeury 작성(jpa 에서 group by 사용하기)

반응형

- 나의 상황

select crl 
	from ra_crl 
    where (elector_group_id, crl_version) 
    in (
    	select elector_group_id, max(crl_version) as crl_version 
        	from ra_crl 
            group by elector_group_id
       )

이런 쿼리를 jpa로 작성해야했음. 근데 jpa 는 group by 를 지원하지않음.

- 해결

Repository 에서 @Query 어노테이션을 이용하여 직접 쿼리를 작성하며, nativeQuery = true 를 추가해줘야함.

주의사항으로는 컬럼명을 entity에 정의한대로 쓰지 못하고 실제 db의 컬럼명을 사용해야하며 return 결과도 entity로 바로 받지 못한다.

예를들어 조회해오는 항목이 둘 이상이면 Object[] 를 사용하여 순서대로 하나씩 꺼낼 수 있다. 

@Query(value="select ctl from ra_ctl where (elector_group_id, seq_num) in (select elector_group_id, max(seq_num) as seq_num from ra_ctl group by elector_group_id)", nativeQuery = true)
    List<String> getCtl();
반응형