Spring data JPA原生查询返回1个实体,而不是List

问题描述 投票:0回答:2

我有查询(总是返回 List has 1

SysAutoId

@Query(value = "SELECT * FROM SYSAutoID WHERE RefTypeCategory = ?1 AND BranchID = ?2 ", nativeQuery = true)
List<SysAutoId> findSpecific(Integer refTypeCategory, Integer branchId);

我想创建一个像

这样的方法
@Query(value = "SELECT * FROM SYSAutoID WHERE RefTypeCategory = ?1 AND BranchID = ?2 ", nativeQuery = true)
SysAutoId findSpecific(Integer refTypeCategory, Integer branchId);

返回一个实体,怎么做?

java jpa spring-data-jpa
2个回答
5
投票

返回类型应该是Entity的

Optional
,因为它只返回第一条匹配的记录,看一下findById方法的语法

Optional<T> findById(ID primaryKey)

代码

@Query(value = "SELECT * FROM SYSAutoID WHERE RefTypeCategory = ?1 AND BranchID = ?2 ", nativeQuery = true)
Optional<SysAutoId> findSpecific(Integer refTypeCategory, Integer branchId);

0
投票

你不需要Optional,你只需要确保查询永远不会返回超过1个结果,否则会出现In CorrectResultSizeDataAccessException异常。

您可以在此处

查看支持的查询返回类型

对于 T 的返回类型,它表示:

一个独特的实体。期望查询方法最多返回一个结果。如果没有找到结果,则返回 null。多个结果会触发 In CorrectResultSizeDataAccessException。

如果您知道您的查询永远不会返回超过 1 个结果,您应该没问题,但如果您不确定,我建议在查询末尾添加 LIMIT 1。

© www.soinside.com 2019 - 2024. All rights reserved.