有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个数据库,其中包含一些测试的数据,我想使用它们的属性日期对它们进行适当的排序,并且只取所有测试中的第一个。我的意思是,相当于JPQL中SQL的前1名

谢谢你的帮助


共 (4) 个答案

  1. # 1 楼答案

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

    Foo findTopByOrderByDateDesc(); //Top 1 assumed
    Foo findFirstByOrderByDateDesc(); //First 1 assumed

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

    List<Foo> findTopXByOrderByDateDesc();
    List<Foo> findFirstXByOrderByDateDesc();

    如果要记住处理null返回,请将结果包装为Optional

    Optional<Foo> findTopByOrderByDateDesc();
    Optional<Foo> findFirstByOrderByDateDesc();

  2. # 2 楼答案

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

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

    通过使用Spring数据Jpa语法,您可以使用如下内容:

    Optional<Test> findFirstByOrderByDateDesc();
    

    或者使用Pageable

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

    在春季jpa中,你可以这样做

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

    供参考Spring Jpa Doc

  4. # 4 楼答案

    大多数常见

    Foo findFirstByOrderByDateDESC();
    

    @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