DB/JPA

JPA limit

user-anonymous 2020. 10. 7. 09:52
728x90

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 문제가 해결됐다. 

 

 

728x90
반응형

'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