【发布时间】:2015-03-19 12:37:03
【问题描述】:
我们的 Java 应用是基于 Spring 的,我们有域类和通过 Liquibase 生成的相应架构。
我们计划添加对要审核的单个域的支持。
一个。我们没有 hibernate.xml 和 hibernate.cfg.xml,而是使用 application-context.xml。那么如何通过@Audited 等注解创建审计表。
我该如何解决这个问题?我已将休眠配置添加为
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.ejb.event.post-insert">org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener</prop>
<prop key="hibernate.ejb.event.post-update">org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener</prop>
<prop key="hibernate.ejb.event.post-delete">org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener</prop>
<prop key="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener</prop>
<!-- <prop key="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener</prop>
<prop key="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListener</prop> -->
<prop key="org.hibernate.envers.revision_field_name">REV</prop>
<prop key="org.hibernate.envers.revision_type_field_name">REVTYPE</prop>
<prop key="org.hibernate.envers.auditTablePrefix"></prop>
<prop key="org.hibernate.envers.auditTableSuffix">_AUD</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
在我的域类中添加了@Audited 注释
@Entity
@Audited
@Table(name="user")
public class User implements Serializable {
但是这个配置并没有在开发环境中创建审计表。不清楚我在这里缺少什么额外的配置。
b.我应该如何使用 Liquibase 创建必要的特定环境架构,生产团队对在生产环境中自动生成 SQL 架构的想法并不满意。
【问题讨论】:
-
您可以在使用 Envers 时手动创建审核表。所以我想你需要向 liquibase 添加配置来创建这些表。
-
感谢您的回复!!如果我手动创建审计表,那么在更新原始表中的任何字段时如何填充?
-
您使用的是哪个 Hibernate 版本?使用 4,你不需要任何特殊的配置来启用审计,只需添加 jar 就足够了。
-
我们使用的是休眠版本:3.6.3.Final
标签: java spring hibernate hibernate-envers