0

我正在尝试使用 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" />    

我很好奇如何在审计表中为 import.sql 中的所有插入条目创建自动条目。

如果有人这样做,请告诉我。

谢谢。

4

1 回答 1

1

上面的评论是正确的。Envers 在对象级别拦截实体操作,因此不会审核任何直接查询(包括例如使用 HQL/JPAQL 进行的批量插入/更新)。

这里的一个解决方案是使用对象来创建初始数据,或者编写一些 SQL 脚本来为每个插入的行创建一个初始修订和一个“插入”审计条目。

于 2013-03-21T16:07:24.213 回答