我正在尝试使用hibernate和envers,并希望使用以下属性在模式中创建初始数据:
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.hbm2ddl.import_files" value="/META-INF/spring/import.sql"/>
Envers也与Spring应用程序集成,并在初始创建时创建审计表。
<property name="org.hibernate.envers.audit_strategy" value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>
<property name="org.hibernate.envers.audit_strategy_validity_store_revend_timestamp" value="true"/>
<property name="org.hibernate.envers.revision_field_name" value="revision"/>
<property name="org.hibernate.envers.audit_strategy_validity_end_rev_field_name" value="revision_end"/>
<property name="org.hibernate.envers.revision_type_field_name" value="revision_type"/>
<property name="org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name" value="revision_end_timestamp"/>
<property name="hibernate.ejb.event.post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-delete" value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener" />
我很好奇如何在audit.sql中的所有插入条目的审计表中创建自动条目。
如果有人这样做,请告诉我。
感谢。
答案 0 :(得分:1)
以上评论是正确的。 Envers拦截对象级别的实体操作,因此任何直接查询(包括使用HQL / JPAQL的批量插入/更新)都不会被审计。
这里的解决方案是使用对象来创建初始数据,或者编写一些SQL脚本,为每个插入的行创建初始修订和“插入”审计条目。