【问题标题】:Hibernate Envers: How to get revision from historical entityHibernate Envers:如何从历史实体中获取修订
【发布时间】:2013-09-20 07:44:57
【问题描述】:

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

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:

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

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

    【讨论】:

    • 亚当,谢谢你的建议;但是contains 并不能帮助我确定历史实体的修订版。它必须是内部已知的,因为它可以遍历关系并获得正确的实体修订。我想我将不得不更深入地挖掘,看看我是否可以公开修订版。
    • 嗯,这将是您用来阅读原始历史实体的同一修订版 :) 是的,修订版存储在用于遍历关系的代理中。
    • 我试图尽可能简化这个问题以消除噪音。我希望这不会让我的观点变得不那么清楚!在我想知道我拥有的实体是当前版本还是历史版本时,我不知道用于获取实体的版本。我希望得到类似的东西:Long revision = session.contains(myobject) ? null : reader.getRevision(myobject);
    • 目前还没有这种方法,很遗憾。
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多