JPA를 이용해 쿼리를 작성할 때 1개의 데이터만 불러와야 할 때가 있었다.
그리하여 나는 @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<testVo> findAllByhmName( String hmName ,Pageable pageable);
default List<testVo> findTop1ByTmCalId(String hmName ){
return findAllByhmNameString (hmName , PageRequest.of(0,1));
}
인터페이스는 실제 코드를 구현하는 로직은 쓸 수없고, 단지 선언만 가능하다. 하지만 default를 쓰게 된다면 코드가 포함된 메소드 선언이 가능하게 JAVA8에서부터 지원한다.
그리하여 default List<testVo>를 명시해준 다음
return findAllByhmName(hmName , PageRequest.of(0,1));
를 작성한다. PageRequest는 JPA에서 제공해준다. 즉 "n 개수만 불러와줘"와 비슷한 개념을 가진다.
PageRequest(int page, int size)를 상속받는다.
이렇게 사용하고 나니 limit 문제가 해결됐다.
'DB > JPA' 카테고리의 다른 글
[ JPA ] 엔티티 toString 무한 호출 (0) | 2021.07.18 |
---|---|
JPA DDL (0) | 2021.02.17 |
JPA 관계 (@OneToOne, @OneToMany, @ManyToOne) (0) | 2020.10.12 |
[JPA] Infinite recursion 에러 발생 (0) | 2020.10.12 |
JPA - @Transient (0) | 2020.09.26 |