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

如何不使用Hibernate Envers审计连接表和相关实体?

陶胤
2023-03-14

我使用Hibernate恩维尔斯来审核我的实体。

我有一个被审计的实体,Foo,它有一个列表

@Entity
@Audited
public class Foo {

    @JoinTable(name = "T_FOO_BAR", joinColumns = @JoinColumn(name = "FOO_ID"), inverseJoinColumns = @JoinColumn(name = "BAR_ID"))
    @ManyToMany(cascade = PERSIST)
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    public List<Bar> getBars() {
        return bars;
    }

}

现在,我想检索Foo的修订版:

    AuditReader reader = AuditReaderFactory.get(getEntityManager());
    Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult();

不幸的是,当我想要检索所有数据时(即,当它延迟加载< code >条,我得到错误< code>ORA-00942:表或视图不存在,因为它试图查询:

select ... from T_FOO_BAR_AUD x, T_BAR y where ...

我认为,使用@Audited(targetAuditMode=RelationTargetAuditModel.NOT_Audited),Hibernate Envers将保留与当前实体的Baritem的链接。

那么,我该如何解决我的问题,而不必显式地审计表< code>T_BAR和< code>T_FOO_BAR(连接表)?换句话说,当我从我的修订实体中检索< code >条的列表时,我从我的当前实体中获得< code >条的列表(因为< code>Foo和< code >条之间的链接没有被审计)。

谢谢。

共有1个答案

孟哲
2023-03-14

当您应该在案例中使用@NotAudited时,您似乎正在使用

< code>RelationTargetAuditMode。NOT_AUDITED将不会审计目标实体。它仍然会尝试审核< code >列表

从文档中:

如果您想要审计一个关系,其中目标实体没有被审计(例如,类似字典的实体就是这种情况,它们不会改变,也不必被审计),只需用< code > @ Audited(targetAuditMode = RelationTargetAuditMode)对其进行注释。未审计)。然后,当读取实体的历史版本时,关系将总是指向“当前”相关实体。

 类似资料:
  • 问题内容: 我使用Hibernate Envers审核我的实体。 我有一个审核的实体,它具有as属性。但是,我不想审核实体。因此,我写道: 现在,我要检索的修订: 不幸的是,当我想检索所有数据时(即,当它延迟加载时),我得到了error ,因为它试图查询: 我虽然使用,但Hibernate Envers会保持与 当前 实体项目的链接。 __ 那么如何解决我的问题,而不必显式审核表和(联接表)?在别

  • 问题内容: 我有两个表- 一个包含地址,另一个包含照片。它们之间唯一的共同字段是PersonID。这些被映射到两个POJO类Address和Photo。我可以通过创建条件并在字段中添加限制来获取这些表中的详细信息。我们应该如何在两个表上编写联接。是否有可能将结果作为两个对象获得- 地址和照片。 我想做一个左联接,这样我也可以得到没有照片的人的记录。我读过,只有使用hql才有可能,但是也可以使用条件

  • 问题内容: 该SQL语句如何转换为Propel(1.6.3)? 由于tableA和tableB不共享外键,也没有定义关系。 无法运作,因为Propel报错: “致命错误:消息’TableA表上的未知关系TableB的未捕获异常’PropelException’ 非常感谢您的帮助和提示!这是我在这里的第一篇文章,希望我还没有做错任何事情:-)(在发布之前,我已经进行了彻底的搜索!) 问题答案: 您可

  • 我随时都有一个“用户”表,如果插入、更新或删除了一行,那么我需要在“用户审核”表中插入一行,其中包含所有用户数据和操作列,以记录执行的操作。 我用的是Spring批处理,Spring数据JPA把数据插入用户表 我如何使用SpringDataJPA在SpringBatch中实现这一点,或者JPA/hibernate是否提供了任何实现?

  • 问题内容: 可以说我有下表: 现在,如何运行MySQL查询,该查询将基于“国家/城市”表返回国家和城市总数? 在示例中返回: 问题答案: 试试看: 输出:

  • 我正在尝试使用一个不是很简单的关联表在两个JPA实体之间进行ManyTo许多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。 表A-ID(PK) -名称 表b -ID(PK) -名称 TableMapping-ID(PK) -Parent\u ID(FK)-- 映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必