我一定错过了一些明显的东西;然而,我正在努力寻找 Hibernate Envers 遇到的问题的答案。
假设我有一个名为 MyObject 的实体类,它是使用 envers 进行审核的。
如果我获取 MyObject 实例的当前副本,执行以下操作:
Session session = sessionFactory.getCurrentSession();
MyObject myobject1 = (MyObject) session.get(MyObject.class, 1234);
我得到了同一实例的历史副本(来自修订版 2):
Session session = sessionFactory.getCurrentSession();
AuditReader reader = AuditReaderFactory.get(session);
MyObject myobject2 = reader.find(MyObject.class, 1234, 2);
有什么方法可以区分 myobject1 和 myobject2 吗?我如何知道 myobject1 是当前副本而 myobject2 来自修订版 2?
最佳答案
没有“官方”方式。两者都只是用不同数据实例化的对象。
不过,您可以检查 session
是否包含 myobject1
/myobject2
(使用 contians
方法: http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html )。只要您不清除或更改持久性上下文,这就会起作用,并且将为“当前”实体返回 true
,为历史实体返回 false
。但这更多的是一种变通办法,而不是适当的解决方案。
关于java - hibernate 恩弗斯 : How to get revision from historical entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18911454/