[英]Hibernate findOne doesn't work the first time
当id
匹配数据库中的表单修订时,以下代码将引发NullPointerException:
@Transactional(readOnly = true)
public FormRevision getFormRevision(Long id) {
FormRevision formRevision = formRevisionDao.findOne(id);
formRevision.fillLazyCollections();//NullPointerException happens here for some form revisions
return formRevision;
}
发生这种情况是因为formRevisionDao.findOne(id)
对于某些表单修订返回null
。 并非每个表单修订都发生这种情况,但是对于确实发生这种情况,因为它是一致的,并且每次都会失败。
附加信息:
formRevisionDAO对象是由Hibernate自动生成的,如下所示
@Repository()
public interface IFormRevisionDAO extends JpaRepository<FormRevision, Long> {}
生成的休眠查询看起来不像是可能的原因。 它仅具有左外部联接,而where子句仅是“ id =?”。 此外,此查询适用于其他表单修订。
由于我从FormRevision对象中删除了缓存,因此该问题似乎也不是缓存问题,问题仍然存在。
最奇怪的是,如果您调试代码,则第一个formRevisionDao.findOne(id)
将返回null。 但是,随后的相同调用将返回预期的对象。
我不确定还有什么可能导致此问题。 可能是同步或Hibernate版本问题(当前使用Hibernate 4.1.12并将其与“ Oracle数据库10g 10.2.0.4.0版-64位生产”一起使用)?
任何帮助/见解将不胜感激!
根据Spring Data文档 ,findOne:
返回:具有给定id的实体;如果找不到,则返回null
抛出:IllegalArgumentException-如果id为null
因此,仅当找不到条目时,它才返回null。 始终如一并始终返回null加强了未找到记录的结论。 使用相同的数据库凭据,然后打开一个SQL控制台并检查缺少的记录查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.