Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate Envers:如何从历史实体获取修订_Java_Hibernate_Hibernate Envers - Fatal编程技术网

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

Java Hibernate Envers:如何从历史实体获取修订,java,hibernate,hibernate-envers,Java,Hibernate,Hibernate Envers,我一定错过了一些明显的东西;然而,我正在努力找到一个解决Hibernate Envers问题的答案 假设我有一个名为MyObject的实体类,它是使用envers审计的 如果我获取MyObject实例的当前副本,执行以下操作: Session session = sessionFactory.getCurrentSession(); MyObject myobject1 = (MyObject) session.get(MyObject.class, 1234); 我得到了同一实例的历史副本(

我一定错过了一些明显的东西;然而,我正在努力找到一个解决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来自Revision 2?

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

不过,您可以检查
会话
是否包含
myobject1
/
myobject2
(使用
contians
方法:)。只要不清除或更改持久性上下文,这将起作用,对于“当前”实体将返回
true
,对于历史实体将返回
false
。但这与其说是一个合适的解决方案,不如说是一种变通办法。

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


不过,您可以检查
会话
是否包含
myobject1
/
myobject2
(使用
contians
方法:)。只要不清除或更改持久性上下文,这将起作用,对于“当前”实体将返回
true
,对于历史实体将返回
false
。但这与其说是一个恰当的解决方案,不如说是一个变通办法。

Adam,谢谢你的建议;但是,
包含
不能帮助我确定历史实体的修订。它必须在内部已知,因为可以遍历关系并获得正确的实体修订。我想我需要更深入地挖掘,看看是否可以公开修订版。好吧,这将是你用来阅读原始历史实体的同一修订版:)是的,修订版存储在用于处理关系的代理中。我尝试尽可能地简化这个问题,以消除噪音。我希望这不会使我的观点不那么清楚!在我想知道我拥有的实体是当前版本还是历史版本时,我不知道用于获取实体的版本。我希望得到这样的东西:
Long revision=session.contains(myobject)?null:reader.getRevision(myobject)包含
不能帮助我确定历史实体的修订。它必须在内部已知,因为可以遍历关系并获得正确的实体修订。我想我需要更深入地挖掘,看看是否可以公开修订版。好吧,这将是你用来阅读原始历史实体的同一修订版:)是的,修订版存储在用于处理关系的代理中。我尝试尽可能地简化这个问题,以消除噪音。我希望这不会使我的观点不那么清楚!在我想知道我拥有的实体是当前版本还是历史版本时,我不知道用于获取实体的版本。我希望得到这样的东西:
Long revision=session.contains(myobject)?null:reader.getRevision(myobject)