如何使用JPQL从SELECT操作获得第一行?

时间:2019-06-12 16:38:48

标签: java spring spring-boot jpa jpql

我有一个数据库,其中包含有关某些测试的数据,我想使用其属性DATE合理地对它们进行排序,并仅采用所有这些中的第一个。我的意思是,JPQL中相当于SQL的TOP 1。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

通常在触发提取之前,在Query对象上进行设置:

entityManager.createQuery("...")
       .setMaxResults(1)
       .getResultList();

使用Spring Data Jpa语法,您将使用类似以下内容:

Optional<Test> findFirstByOrderByDateDesc();

或使用Pageable

Page<Test> test = repository.findAll(
    PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, "date")));

答案 1 :(得分:0)

在jpa春季,您可以执行以下操作

Foo findTopByOrderByDateDesc(); //This will return 1st item

List<Foo> findTop10ByOrderByDateDesc(); //This will return top 10 item

供参考Spring Jpa Doc

答案 2 :(得分:0)

最常见

Foo findFirstByOrderByDateDESC();

nativeQuery = true一起使用 @Query

@Query(value="SELECT 1 * FROM "TableName" ORDER BY "DATE in db" DESC LIMIT 1", nativeQuery = true)
Foo findFirstByOrderByDateDESC(Long id); // name can be random

答案 3 :(得分:0)

Spring Data JPA中,使用关键字firsttop,两者在语义上是相同的,我更喜欢top,因为要输入的字母要少 2 个;-)

<块引用>

Foo findTopByOrderByDateDesc(); //假设前1个
Foo findFirstByOrderByDateDesc(); //假设前1个

如果要查找前 X 行,其中 X 是数字,请使用:

<块引用>

List findTopXByOrderByDateDesc();
List findFirstXByOrderByDateDesc();

如果您想记住处理空返回,请将结果包装在 Optional 中:

<块引用>

可选 findTopByOrderByDateDesc();
可选 findFirstByOrderByDateDesc();
可选> findTopXByOrderByDateDesc();
可选> findFirstXByOrderByDateDesc();