반응형
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
)
반응형