1

我一定遗漏了一些明显的东西;但是,我正在努力寻找 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?

4

1 回答 1

1

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

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

于 2013-09-22T09:39:41.990 回答