Hibernate Envers:如何从历史实体获得修订

时间:2013-09-20 07:44:57

标签: java hibernate hibernate-envers

我必须遗漏一些明显的东西;但是我很难找到我对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来自revsion 2?

1 个答案:

答案 0 :(得分:1)

没有“官方”方式。两者都只是用不同数据实例化的对象。

您可以检查session是否包含myobject1 / myobject2(使用contians方法:http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html)。只要您不清除或更改持久性上下文,这将有效,并且将为“当前”实体返回true,为历史实体返回false。但这更像是一种解决方案,而不是一种适当的解决方案。