개발/JAVA

[Java] Spring JPA findOne 과 findTop1 의 차이

여름청춘 2023. 8. 30. 19:20

 

결론

where 의 컬럼이 PK 또는 unique 한 값 (id, goodsId, no 등 값이 하나) 일 때 findOne 을 써도된다. 

여러개 나와도 상위 1개 limit 1 을 얻고 싶은 경우에는 findTop1 을 써야 한다. 

 

 

 

과정

내가 원하는 값은 상품번호로 조회하고 order by goodsId desc 로 정렬하여 상위 1개의 데이터를 뽑고싶었다. 

 

1. findOne을 사용할 경우 돌아가는 쿼리 

Repository.findOneByOrderByGoodsIdDesc();
select *
        from
            stock.shop_product
        order by
            goods_no desc
            ;

 

쿼리문을 컴파일해본 결과 limit 조건절이 생기지 않았다. 

 

 

2. findTop1 을 사용할 경우 돌아가는 쿼리 

Repository.findTop1ByOrderByGoodsIdDesc();
           select *
        from
            stock.shop_product
        order by
            goods_no desc limit 1;

 

내가 원하는 대로 나왔다. 

 

여기서 Top100 , Top1000 등 내가 원하는 limit 값을 설정할 수 있다.