0

I am trying to use hibernate and envers and want to create initial data in the schema using following property:

<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.hbm2ddl.import_files" value="/META-INF/spring/import.sql"/>

Envers is also integrated with this Spring application and creates audit tables on initial create.

<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" />    

I am curious how can I create automatic entries in audit tables for all the insert entries in the import.sql.

If anyone has done this, kindly let me know.

Thanks.

niks75
  • 73
  • 7

1 Answers1

1

The comments above are correct. Envers intercepts entity operations at the object level, so any direct queries (that includes e.g. batch inserts/updates using HQL/JPAQL) won't be audited.

A solution here would be either to use objects to create the initial data, or write some SQL script which creates an initial revision and an "insert" audit entry for each inserted row.

adamw
  • 8,038
  • 4
  • 28
  • 32