当我运行JUnits并查看生成的数据库时,我看到审计列(create user、create ts、update user、update ts)不在历史表中,而是在基本实体表中。
因此,我运行了一些额外的测试,并且我的基本实体扩展了一个包含审计列的抽象类。因此,我可以重新使用所有需要审计信息的实体。我更改了基本实体,不再扩展抽象审计类,并添加了审计属性和方法。现在,历史表确实包含了审计列。
因此,envers似乎没有查看实体层次结构来确定要添加到历史表中的列。
思想?
我对基本实体使用了审计支持,因此它为审计表创建了所有列,包括基本实体列:
需要用@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是否提供了任何实现?