본문 바로가기

DB/JPA

JPA에서 단일 데이터 조회하기

728x90

JPA에서 단일 데이터 조회하기

JPA로 쿼리를 작성할 때 한 개의 데이터만 불러와야 하는 상황이 있었다.

그래서 @Query 어노테이션을 써서 이렇게 작성했는데,

@Query("select h from testVo h where h.hmName = :hmName limit 1")

하지만 여기서 limit 때문에 에러가 났다. 이유는 Hibernate의 HQL 문법이 SQL의 LIMIT을 지원하지 않아서였다.

스택오버플로우를 찾아보니 이렇게 하면 한 개만 가져올 수 있다고 해서 시도해봤다.

@Query(value = "select h from testVo h where h.hmName = :hmName")
List findAllByhmName(String hmName, Pageable pageable);

default List findTop1ByTmCalId(String hmName) {
    return findAllByhmName(hmName, PageRequest.of(0, 1));
}

인터페이스에서는 보통 구현 코드를 쓸 수 없는데, Java 8부터 default 메소드를 통해 구현부를 넣을 수 있게 됐다.

그래서 default 메소드 안에서 findAllByhmNamePageRequest.of(0, 1)을 넘겨줘서 한 개만 가져오도록 한 거다. 이 PageRequest는 JPA에서 제공하는 기능으로, '몇 개만 불러와'라는 개념과 비슷하다.

결과적으로 이렇게 하니 limit 관련 문제를 해결할 수 있었다.

728x90
반응형