본문 바로가기

개발/JPA

[JPA] @Query 로 직접 쿼리 작성하기

반응형

JPA 로 개발을 할때는 대부분은 Repository 에서 키워드만 잘 조합하면 모든 쿼리를 자동으로 만들어줘서 아주아주 편리하다.

그러나 조금만 복잡해져도 쿼리 메소드가 아주아주 길어진다.

그럴땐 그냥 @Query 쿼리 어노테이션을 이용하여 조금 더 자세한 조건을 줄 수 있다.

@Query 어노테이션을 사용하면 직접 쿼리문을 작성할 수 있다.

@Query("select a.* from entity a where a.status = 1")
List<Entity> findAllByStatus();

만약 변수를 받아 쿼리를 조회하고 싶다면 ':' 를 사용하면 된다. 

@Query("select a.* from table a where a.status = :stats")
List<Table> findAllByStatus(int status);

* 참고 : 리턴타입을 꼭 엔티티로 할 필요는 없다. 필요한 변수만 받는 경우 Object[] 를 사용할 수 도 있다.

이 경우는 모두 JPA 에서 관리하는 JPQL 이라서 entity 명과 entity의 변수명으로 쿼리문을 작성해야한다.

 

나는 아래 쿼리를  JPA로 써야 했는데 group by 는 jpa 가 지원하지 않고... where () 여기서 오류가 나서 보니 nativeQuery로 작성해야한다고 나왔다. nativeQuery 는 다음 글에서..

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
       )

 

 

 

 

반응형