当前位置: 首页 > 知识库问答 >
问题:

Hibernate恩维尔斯:如何从历史实体获取修订

南宫阳冰
2023-03-14

我肯定遗漏了一些显而易见的东西;然而,我正在努力寻找一个答案来解决我与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?

共有1个答案

黄朗
2023-03-14

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

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

 类似资料:
  • 是否可以在CustomEntityTrackingListener或CustomRevsionListener中捕获正在修改的实体(Book)? 我试图获取通过API/save book或/update/{id}/{pages}传递的所有信息,而不仅仅是版本信息。 在 envers 审核实体时,它会自动为每个实体创建一个_AUD表和一个修订表,以连接实体及其_AUD表 使用自定义的修订监听程序,我

  • 我正在实现一个 JPA-EJB 解决方案,该解决方案使用Hibernate-恩维尔斯来审核更改。使用玛丽亚DB 5.5.49. 我有一个表,它有一个< code>auto_increment字段(这不是PK,只是另一个字段),我是这样定义的: 我还按照mysql的要求为这个字段创建了一个索引和一个惟一的约束。 不知何故,Envers 无法识别此字段,并且不会在试镜表中存储 caseNumber 的

  • 我正在做一个项目,我需要自动创建特定表的历史。我为它使用了注释,但它在表中创建重复数据。由于重复的数据,我正在耗尽空间。甚至Eclipse Link也没有回避我的问题。

  • 最近,我在使用标准应用编程接口时遇到了问题。这是我第一次接触它。这是我的办公室实体的一部分。 目标-从特定的办公室实体获取工人实体列表。到目前为止,我已经知道如何通过以下方式实现目标: 它工作得很好,但我认为我太依赖JavaList接口方法而不是CriteriaAPI。我可以通过在Criteria中创建适当的查询来获取WorkerEntity(OfficeEntity中的字段“workers”)列

  • 问题内容: 我从React-Router v3迁移到v4时遇到一些小问题。在v3中,我可以在任何地方执行此操作: 如何在v4中实现这一目标。 我知道当您在Component中时,可以使用hoc ,react上下文或事件路由器props。但对我而言并非如此。 我正在寻找v4中的NavigatingOutsideOfComponents的等效项 问题答案: 您只需要有一个导出对象的模块。然后,您将在整

  • 4.6 ABP应用层 - 实体历史 4.6.1 简介 ABP 提供了一个基础设施,可以自动的记录所有实体以及属性的变更历史。 实体更改涉及要保存的字段有:租户Id (tenant id), 实体变更集Id (entity change set id), 实体Id (entity id), 实体类型名称 (entity type name), 变更时间 (change time) 以及 变更类型 (