728x90
- 최근 개발하면서 가장 상위에 있는 한개의 로우의 id 값을 id순으로 역순으로 정렬한뒤 가져오는 쿼리를 짜서 작업을 하려고 다음과 같이 쿼리문을 작성해서 JPQL을 사용하려고 했는데, 오류가 발생했다.
-- mariaDB 기준
select id from table order by id desc limit 1;
- 찾아보니 JPQL은 limit 명령어를 지원하지 않는다고 해서, 구글을 좀 뒤져보니 쉽게 해결방법을 찾을 수 있었다.
- Spring JPA에서도 결과를 제한하는 기능을 제공하고 있었고, 나의 경우는 다음 문서를 참고했다. (Spring JPA Doc)
대충 정리하면 Spring JPA에서 쿼리 결과를 제한하는 기능은 first와 Top을 이용하면 되고 코드는 다음과 같이 작성하면 된다.
public interface EntityRepository extends JpaRepository<Entity, Long> {
// Entity 테이블을 id역순으로 정렬한 뒤 첫 로우리턴
// 두메소드의 결과 값은 동일하다.
Entity findFirstByOrderByIdDesc();
Entity findTop1ByOrderByIdDesc();
}
- 위의 링크가 걸려있는 문서를 참조하는게 더 빠르겠지만, 간단히 설명하면 FirtstvalueBy 메소드에서 value 부분에 제한하고 싶은 개수를 입력해주면 된다. 아무것도 입력하지 않으면 1개의 로우만 리턴된다. 밑의 Top이 포함되는 메소드도 동일하게 사용할 수 있다.
- 이외에 Spring Page 자료형을 이용하던가 List자료형으로 받아서 해결하는 방법이 있긴하지만 이왕이면 제공되는 방식으로 깔끔하게 작성하는게 좋은 것 같다.
출처: https://www-swpro-com.tistory.com/46 [Share the knowledge:티스토리]
728x90
'JPA' 카테고리의 다른 글
Java8 Optional 의 ifPresent 활용 (2) | 2022.09.01 |
---|---|
@Transactional(rollbackFor = Exception.class) 에 대해 (0) | 2022.08.26 |
페이징 한계돌파 시, ToMany 관계를 Entity -> DTO로 표현하는 방법 (0) | 2022.07.14 |
JPA 낙관적 락(부제 - OPTIMISTIC) (0) | 2022.06.22 |
@CreatedBy, @ModifiedBy 사용하기 (0) | 2022.06.21 |