当前位置: 首页 > 面试题库 >

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

双恩
2023-03-14
问题内容

我使用Hibernate Envers审核我的实体。

我有一个审核的实体,Foo它具有List<Bar>as属性。但是,我不想审核Bar实体。因此,我写道:

@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();

不幸的是,当我想检索所有数据时(即,当它延迟加载时bars),我得到了error ORA-00942: table or view does not exist,因为它试图查询:

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

我虽然使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED),但Hibernate Envers会保持与 当前 实体Bar项目的链接。
__

那么如何解决我的问题,而不必显式审核表T_BART_FOO_BAR(联接表)?在别人的话,当我检索列表bars从我的修订实体,我得到的名单bars,从我目前的实体(如之间的联系Foo,并Bar未经审计)。

谢谢。


问题答案:

看起来@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)应该在使用@NotAudited的情况下使用。

RelationTargetAuditMode.NOT_AUDITED根本不会审计 目标实体
。仍将尝试审核的List<Bar>属性Foo,并因此审核联接表。

从文档:

如果您要审核不审核目标实体的关系(例如,类似字典的实体就是这种情况,它们不会更改且不必审核),只需用注释即可@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。然后,在读取您实体的历史版本时,该关系将始终指向与“当前”相关的实体。



 类似资料:
  • 我使用Hibernate恩维尔斯来审核我的实体。 我有一个被审计的实体,,它有一个 ,我得到错误< code>ORA-00942:表或视图不存在,因为它试图查询: 我认为,使用,Hibernate Envers将保留与当前实体的item的链接。 那么,我该如何解决我的问题,而不必显式地审计表< code>T_BAR和< code>T_FOO_BAR(连接表)?换句话说,当我从我的修订实体中检索<

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

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

  • 我有一个实体像下面在Nestjs应用程序与typeorm为mongoDB: 我的其他实体扩展了审计,在我的应用程序中,我使用jwt来验证用户。 问题是,当我想保存一个实体,我不知道如何设置createdBy与@Before插入钩子... 我知道请求中有用户,但我不知道将用户引入方法的正确方法是什么?

  • 我有两个不相关的表,每一个都有字段email。我需要一个查询,它引入从第二个表的列,如果电子邮件匹配或将是空的,如果没有找到匹配。在SQL中,这很容易: 现在,它作为JPA查询工作,但我们使用的是查询DSL,因此我们开始转换它: 它工作,但现在我不知道如何实现排序和筛选的字段引入子查询。 是用于收集结果的POJO;是从自动生成的类。 问题是:如何使用查询DSL和JPA并避免本机SQL连接两个不相关

  • 我在试图让被审计的实体引用未被审计的实体时遇到问题。在我们的应用程序中,某些实体在没有使用hibernate的情况下被引导,这些实体是我们的元模型,不需要被审计。 如果我执行代码: 一切都很顺利,但是如果我试图获得B的版本,就会出现错误: 组织.Hibernate.对象不发现例外:不存在具有给定标识符的行 [元foo] Envers通过对metafoo实体的惰性引用成功地查找了B实体。然而,当尝试