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

Spring Data/JPA,审计,Envers..History表缺少基表中的列

屠锦
2023-03-14
  • 向pom.xml添加了spring-data-envers
  • 向SpringBootApplication@SpringBootApplication@enablecaching@enablejPaAudity(modifyoncreate=false)@EnableJPARepositories(repositoryFactoryBeanClass=enversrevisionrepositoryfactorybean.class)
  • 添加了EnableJPARepositories

当我运行JUnits并查看生成的数据库时,我看到审计列(create user、create ts、update user、update ts)不在历史表中,而是在基本实体表中。

因此,我运行了一些额外的测试,并且我的基本实体扩展了一个包含审计列的抽象类。因此,我可以重新使用所有需要审计信息的实体。我更改了基本实体,不再扩展抽象审计类,并添加了审计属性和方法。现在,历史表确实包含了审计列。

因此,envers似乎没有查看实体层次结构来确定要添加到历史表中的列。

思想?

共有1个答案

华展鹏
2023-03-14

我对基本实体使用了审计支持,因此它为审计表创建了所有列,包括基本实体列:

需要用@audited注释实体:

    @Audited
    @Table(name="exam_answer",schema="exam")
    public class ExamAnswer extends CoreEnt{}

具有字段的基本实体:

@Audited
@MappedSuperclass
public abstract class CoreEnt {

    @Id
    @Access(AccessType.PROPERTY)
    @Column(name = "oid")
    private  String oid;
    @Column(name = "status")
    private String status;
    @Column(name = "created_date")
    private String createdDate;
    @Column(name = "updated_date")
    private String updatedDate;
    @Column(name="state")
    private Byte state; ....
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-envers</artifactId>
        <version>5.2.9.Final</version>
    </dependency>
protected Properties additionalProperties() {
    final Properties hibernateProperties = new Properties();
    hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
    hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
    hibernateProperties.setProperty("hibernate.default_schema", env.getProperty("hibernate.default_schema"));

    hibernateProperties.setProperty("org.hibernate.envers.default_schema", "audit");
    hibernateProperties.setProperty("org.hibernate.envers.audit_table_suffix", "_aud");

    hibernateProperties.setProperty("org.hibernate.envers.revision_field_name", "rev");
    hibernateProperties.setProperty("org.hibernate.envers.revision_type_field_name", "rev_type");
    hibernateProperties.setProperty("org.hibernate.envers.audit_strategy", "org.hibernate.envers.strategy.DefaultAuditStrategy");

    hibernateProperties.setProperty("org.hibernate.envers.use_revision_entity_with_native_id", "false");

    return hibernateProperties;
}
 类似资料:
  • 我的项目中有几个类是由Hibernate处理的,有些是由Envers审核的,有些则不是。现在,当我试图保存某个未经审计的实体时,我得到了以下信息: 有些人可能认为我的数据库中没有审计表,但是Envers甚至不应该试图寻找这个表,因为实体没有被审计。我的类看起来像这样: 因此,每个类都包含一个子类列表,其中包含对其父类的引用。这些类都没有用-注释标记,但它们引用了一些已审核的实体。然而,每个引用都用

  • 我正在使用Hibernate Envers来审计一些实体。我手动创建了关联的审计表。然而,我很难确定审核表的主键应该是什么。例如,考虑一个设计用于存储客户的虚构表格: 并且创建审计表: 以下是我考虑的选择: 这不能是主键,因为同一修订期间可能会修改同一类的多个实体。 这似乎更有可能,但我不确定Envers是否会在每次修订中为每个客户插入多条记录。 这似乎有些过分,但Enver可能会在每次修订时为每

  • 我正在使用Hibernate恩维尔斯来审计实体。有可能获得实体的所有版本/修订版,如下所示: 但这需要花费太多时间,因为它将所有表连接在一起(在此示例中为 rev、soup_aud ingredients_aud)。我只需要Soup_AUD的值。 如何使用自定义查询从审计表中选择值? 汤.java: 成分.java:

  • 我使用的与。一切正常,除了当我删除一个实体时,它不会改变审计表中的和的值,而是在。 我已经尝试注册listener,但没有帮助。 这是我的最新消息: 如何通过修改列和,在审核表中记录删除的人和删除的时间?

  • 由于我是审计新手,请让我了解以上问题。 谢谢你。

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