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

Ivá*_*nos 9 java spring jpa jpql spring-boot

我有一个包含一些测试数据的数据库,我想使用它们的属性 DATE 对它们进行体面的排序,并且只使用所有测试中的第一个。我的意思是,相当于 JPQL 中 SQL 的 TOP 1。

谢谢你的帮助!

Avi*_*Avi 7

在 spring jpa 你可以做这样的事情

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

List<Foo> findTop10ByOrderByDateDesc(); //This will return top 10 item
Run Code Online (Sandbox Code Playgroud)

供参考Spring Jpa Doc


小智 5

最常见

Foo findFirstByOrderByDateDESC();
Run Code Online (Sandbox Code Playgroud)

使用@QuerynativeQuery = true

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


小智 5

该问题具体询问如何在 JPQL 中执行此操作。答案是你不能。您要么需要使用从方法名称派生的 JPA 查询(如跳跃猴子的答案),要么使用本机查询。


Mac*_*ski 4

Query您通常在触发提取之前在对象上设置它:

entityManager.createQuery("...")
       .setMaxResults(1)
       .getResultList();
Run Code Online (Sandbox Code Playgroud)

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

Optional<Test> findFirstByOrderByDateDesc();
Run Code Online (Sandbox Code Playgroud)

或者使用Pageable

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