繁体   English   中英

Hibernate findOne第一次无法使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM