我正在研究各种Spring数据特性,并对我们的应用程序进行评估。我从使用JpaRepository和存储库方法的一些简单JUnits测试(H2数据库)开始使用简单的JPA持久性。然后,我添加了一些对一些表的审计,这些表的创建和更新时间和用户使用JUnit tests....so都非常好。
现在,我正试图为其中一些表创建一个历史表。所以我走了几步
当我运行我的JUnits并查看生成的数据库时,我看到审计列(create、create、update、update )不在历史表中,而是在基本实体表中。
因此,我运行了一些额外的测试,我的基本实体扩展了一个包含审计columns..so的抽象类,我可以重新使用所有需要审计信息的实体。我将基本实体更改为不再扩展抽象审计类,并添加了审计属性和方法。现在,历史表确实包含审计列。
因此,envers似乎不会通过实体层次结构来确定要添加到历史表中的列。
有什么想法?
发布于 2017-11-02 00:15:54
我在基本实体中使用了审计支持,因此它为审计表创建了所有列,包括基本实体列:
需要用@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; ....我使用了带有spring数据jpa的hibernate envers。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.2.9.Final</version>
</dependency>为hibernate envers添加了属性:(我通过java配置设置了它们,也可以通过application.properties设置它们)
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;
}希望能帮上忙!
发布于 2017-10-25 14:54:07
我发现,如果我用@Audited注释父类,那么这些列就会出现在历史表中。
https://stackoverflow.com/questions/46935197
复制相似问题