繁体   English   中英

Hibernate Envers:在ManyToOne关系上找不到实体

[英]Hibernate Envers : Entity not found on a ManyToOne relationship

当将Hibernate从3.3.2.GA升级到4.3.11.Final时,查询审计表时出现了“ EntityNotFoundException”。

我的模特:

@Entity
@Audited
public class A {
   [...]
   @ManyToOne
   @JoinColumn(name = "B_ID", nullable = false)
   private EntityB entityB;
   [...]
}

@Entity
@Audited
public class B {
   [...]
}

当我检查数据库(SQLServer)中的审核表时,我看到了异常的原因。

select * from A_AUD where id = 1  => 1 result with VER_REV = 100 (and B_ID = 10)
select * from B_AUD where id = 10 => 2 results with VER_REV = 200 and 300

当我尝试使用JPA加载时:

getAuditReader( anEntityManager ).createQuery().forRevisionsOfEntity( A.class false, true ).add( AuditEntity.id().eq( 1) );

Hibernate懒加载B_AUD。 但是在查询中,他正在检查VER_REV <=100。并且找不到结果。

休眠3中未检查的数据是否有问题? 还是可以在代码中解决?

我在https://hibernate.atlassian.net/browse/HHH-8093中找到了一些答案元素,但我找不到此问题的“良好实践”。 在数据库中更新VER_REV可能会对其他实体产生影响(我的模型有点复杂)。 而且“修补” Envers必须仅是最后的解决方案。

预先感谢您的回答。

休眠3中未检查的数据是否有问题? 还是可以在代码中解决?

这不一定是代码问题或数据问题。

您提到的场景在修改实体A时很容易发生,但是该修改不会影响实体B的状态,因此第一个修订版仅导致实体A存储了修订记录,例如VER_REV = 100。

后来在某个将来的时间点,又发生了两次修改,更改了实体B但是与前一种情况非常相似,这些更改不会影响实体A ,因此为什么这些实体B更改具有VER_REV = 200和VER_REV = 300。

我添加了评论,一旦对您的配置和映射有了更多的了解,便可以使用更具体的细节来更新此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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