在 JPA 中获取单行

Get single row in JPA

如何从 JPA 中的实体获取单行?

Table:员工

    @Id
    private int empId;
    private String empName;
    ...    

JPA 默认为 return 列表。我正在尝试获取单行。

员工资料库:-

    public Employee findByEmpName(String empName);

还有一种方法,应该使用@Query。

    @Query(value="select e from Employee e where empName = ?1 limit 1", nativeQuery=true)
    public Employee findByEmpName(String empName);

如何确保它 return 单行且结果正确。 感谢您的帮助。提前致谢。

如果您只想 select 结果集中的一行,那么您可以使用 query.setMaxResults [=16= 来限制记录数] 创建 jpa 查询。

示例:criteria.setMaxResults(25); : 它只从 100 条记录中提取 25 条记录。

JPA 有一个获取单行的方法 getSingleResult,但建议获取列表并提取第一个元素超过 getResultList

参见:Example

你不需要"ensure"任何东西。

如果您没有指定为 return 的排序集合(例如 List<Employee> 而不是 Employee )并且您的查询 return 不止一个结果,它将启动javax.persistence.NonUniqueResultException: result returns more than one elements.

如果您的查询 return 更多行,而您只想要其中之一,可以添加一个条件来区分您实际需要的行,或者,如果它们相同,则添加一个好的旧 distinct

How can i ensure that it return single row and correct result.

这是你编写查询的工作

万一有人想要使用 JpaRepository (spring-data-jpa) 从数据库中获取一行,我发现这非常有用:

repository.findAll().stream().findFirst().orElseThrow(...)

由于这是一个流,我假设行(或者更确切地说:对象)是逐行获取的。

有一个开箱即用的解决方案,在存储库中,您可以将方法命名为 findFirstBy...findTopBy...,这应该可以解决问题。

您可以在 Spring reference documentation

中找到更多信息