未找到实体时发生IncorrectResultSizeDataAccessException。首次发现多个时返回

时间:2017-09-29 11:35:43

标签: java spring spring-data spring-data-jpa

我试图找出一个奇怪行为的原因。假设我有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

1 个答案:

答案 0 :(得分:0)

当使用返回单数类型的find方法时,应该应用以下语义:

找到0个元素=&gt;如果适用,请返回nullOptional.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

创建问题