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 메소드 안에서 findAllByhmName
에 PageRequest.of(0, 1)
을 넘겨줘서 한 개만 가져오도록 한 거다. 이 PageRequest는 JPA에서 제공하는 기능으로, '몇 개만 불러와'라는 개념과 비슷하다.
결과적으로 이렇게 하니 limit 관련 문제를 해결할 수 있었다.
728x90
반응형
'DB > JPA' 카테고리의 다른 글
JPA 양방향 연관관계에서 StackOverflowError 발생한 이유와 해결 (0) | 2021.07.18 |
---|---|
JPA - DB 테이블 자동 생성과 양방향 연관관계 설정 (0) | 2021.02.17 |
질문할 때 DB 테이블 구조를 깔끔하게 올리는 방법과 JPA 관계 매핑 정리 (0) | 2020.10.12 |
JPA 양방향 매핑 시 발생한 무한 순환 참조 에러 (0) | 2020.10.12 |
JPA에서 @Transient 사용하기 (0) | 2020.09.26 |