JPA

(Spring Data JPA)리스트에서 첫번째 값만 가져오기

쿠카이든 2022. 8. 24. 10:54
728x90
  • 최근 개발하면서 가장 상위에 있는 한개의 로우의 id 값을 id순으로 역순으로 정렬한뒤 가져오는 쿼리를 짜서 작업을 하려고 다음과 같이 쿼리문을 작성해서 JPQL을 사용하려고 했는데, 오류가 발생했다.
-- mariaDB 기준
select id from table order by id desc limit 1;
  • 찾아보니 JPQL은 limit 명령어를 지원하지 않는다고 해서, 구글을 좀 뒤져보니 쉽게 해결방법을 찾을 수 있었다.
  • Spring JPA에서도 결과를 제한하는 기능을 제공하고 있었고, 나의 경우는 다음 문서를 참고했다. (Spring JPA Doc)
 

Spring Data JPA - Reference Documentation

Example 108. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v

docs.spring.io

대충 정리하면 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:티스토리]

         http://docs.spring.io

728x90