![](/img/trans.png)
[英]How to retrieve audited register with relationship @ManyToOne using Hibernate Envers
[英]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.