【问题标题】:Fetch the latest record in the table containing particular entry in spring jpa获取包含 spring jpa 中特定条目的表中的最新记录
【发布时间】:2021-01-25 10:56:48
【问题描述】:

我有一个Student POJO,我正在尝试从表中为用户输入的输入类获取最新的Student 记录。我知道findTopByIdDesc 可用于最新记录,但如何获取特定列值的最新记录。是否有任何 JPA 实现,或者我是否必须编写自定义查询来执行此操作?

这是我的 POJO:

public class Student {

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE,generator = "student_seq")
    @SequenceGenerator(name="student_seq",allocationSize = 1)
    @Column(name="key_ring_id",insertable =false,nullable = false,updatable = false)
    private Long id;

    @Column(name="name")
    private String name;

    @Column(name ="class")
    private String class;
}

例如,如果 A 班有 10 名学生,B 班有 10 名学生。我需要获取 A 班的最新条目。

【问题讨论】:

  • 在 SQL 中查找 CDC..可能对您有所帮助

标签: java sql spring-data-jpa


【解决方案1】:

是否有任何 JPA 实现或者我必须编写自定义查询来执行此操作?

Spring Data JPA 没有为这种查询提供任何特殊工具。您需要编写自定义查询。

旁注:JPA 实现类似于 Hibernate 和 EclipseLink。 Spring Data JPA 不是 JPA 实现,而是构建在 JPA 之上。

【讨论】:

    【解决方案2】:

    您必须编写自定义查询。

    @Query(value="select max(id) from student where class=:className", nativeQuery=true)
    Long getMaxIdForClass(@Param("className") String className);
    

    【讨论】:

      【解决方案3】:

      您应该编写这个自定义查询:

      @Query(value="select top 1 * from student where class=:className", nativeQuery=true)
      Student getLastestEntryForClass(@Param("className") String className);
      

      逻辑:您必须获取所有班级名称为“A”的学生,然后,您必须返回该学生的第一个条目。因此,我使用的是 TopTop 1。

      注意:前1位用于sql server。如果你使用mysql,那么你必须使用limit 1,如果你使用oracle,你必须使用rownum

      参考此链接 - https://www.w3schools.com/sql/sql_top.asp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 2017-08-17
        • 2020-08-06
        • 2020-11-10
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多