Java Hibernate Envers:如何从历史实体获取修订
我一定错过了一些明显的东西;然而,我正在努力找到一个解决Hibernate Envers问题的答案 假设我有一个名为MyObject的实体类,它是使用envers审计的 如果我获取MyObject实例的当前副本,执行以下操作: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); 我得到了同一实例的历史副本(
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)不幸的是,目前还没有这样的方法。