我试图找出一个奇怪行为的原因。假设我有Spring数据存储库,其中包含一些方法。其中一个有这样的签名:
public Entity findByEntityKeyAndValidToDateAfterAndCorrectionDateAfter(BigInteger entityKey, Timestamp validToDate, Timestamp correctionDate);
我收到了stacktrace的问题,出现以下错误:
org.springframework.dao.IncorrectResultSizeDataAccessException
我决定添加两条在执行此查询时必须返回的记录。 调用此方法而不是抛出异常后,查询只返回其中一个结果。这对我来说很奇怪,这就是为什么我从日志中复制查询并在我的SQL开发人员上使用相同的参数执行它。查询返回两个结果。我尝试更改方法签名以返回实体列表:
public List<Entity> findByEntityKeyAndValidToDateAfterAndCorrectionDateAfter(BigInteger entityKey, Timestamp validToDate, Timestamp correctionDate);
在这种情况下,查询返回两个结果。
知道为什么会这样吗?为什么这个查询不会抛出这个异常?
Spring数据版本为1.10.1.RELEASE
答案 0 :(得分:0)
当使用返回单数类型的find方法时,应该应用以下语义:
找到0个元素=&gt;如果适用,请返回null
或Optional.empty
。
找到1个元素=&gt;返回那个元素。
找到超过1个元素=&gt;应抛出异常。
由于这不是您所看到的,请升级到至少当前的次要版本(1.10.11),但最好升级到当前的GA版本(1.11.7)。如果问题仍然存在,请在https://jira.spring.io/browse/DATAJPA/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel
创建问题