【问题标题】:Data not getting inserted into audit tables in Spring-Hibernate-envers webapp数据未插入 Spring-Hibernate-envers webapp 中的审计表
【发布时间】:2011-07-07 22:06:55
【问题描述】:

我正在开发一个 Spring 和 Hibernate 网络应用程序。我必须使用 Envers 进行审计。
但是当我运行应用程序时,只创建审计表,但没有数据插入审计表。

配置文件:

<mvc:annotation-driven/>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>    
<bean name="callbackHandler" class="org.hibernate.ejb.event.EntityCallbackHandler" />
<bean name="auditEventListener" class="org.hibernate.envers.event.AuditEventListener" />
<bean name="ejb3PostInsertEventListener" class="org.hibernate.ejb.event.EJB3PostInsertEventListener">
  <property name="callbackHandler"><ref bean="callbackHandler"/></property>
</bean>
<bean name="ejb3PostUpdateEventListener" class="org.hibernate.ejb.event.EJB3PostUpdateEventListener">
  <property name="callbackHandler">
    <ref bean="callbackHandler" />
  </property>
</bean>
<bean name="ejb3PostDeleteEventListener" class="org.hibernate.ejb.event.EJB3PostDeleteEventListener">
  <property name="callbackHandler">
    <ref bean="callbackHandler" />
  </property>
</bean>
<bean id="sessionFactory" name="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
  lazy-init="false">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
    <list>        
      <value>foo.bar.Person</value>
    </list>
  </property>

  <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
      <prop key="hibernate.show_sql">true</prop>
      <prop key="hibernate.max_fetch_depth">2</prop>
      <prop key="hibernate.default_batch_fetch_size">8</prop>
      <prop key="hibernate.jdbc.batch_size">20</prop>
      <prop key="hibernate.jdbc.batch_versioned_data">20</prop>
      <prop key="hibernate.generate_statistics">true</prop>
      <prop key="hibernate.jdbc.fetch_size">100</prop>
      <prop key="hibernate.hbm2ddl.auto">update</prop>
    </props>
  </property>
  <property name="eventListeners">
    <map>
      <entry key="post-insert">
        <list>
          <ref bean="ejb3PostInsertEventListener" />
          <ref bean="auditEventListener" />
        </list>
      </entry>
      <entry key="post-update">
        <list>
          <ref bean="ejb3PostUpdateEventListener" />
          <ref bean="auditEventListener" />
        </list>
      </entry>
      <entry key="post-delete">
        <list>
          <ref bean="ejb3PostDeleteEventListener" />
          <ref bean="auditEventListener" />
        </list>
      </entry>
      <entry key="pre-collection-update">
        <ref bean="auditEventListener" />
      </entry>
      <entry key="pre-collection-remove">
        <ref bean="auditEventListener" />
      </entry>
      <entry key="post-collection-recreate">
        <ref bean="auditEventListener" />
      </entry>
    </map>
  </property>   
</bean>

我在服务类中使用@Transactional 注释。 提前致谢。

【问题讨论】:

  • 嗨,谁能帮我解决这个问题。我正在使用 envers 1.2.2 和 hibernate-core 3.3.2。我必须为此使用 吗?

标签: java hibernate spring hibernate-envers


【解决方案1】:

想通了,但不能早点回答。迟到总比永远好 :-)。
为此,我们必须使用&lt;tx:annotation-driven&gt;
另外我认为 Spring 的事务管理和 Hibernate 模板的 saveOrUpdate 存在一些问题。一起使用时,saveOrUpdate 会抛出 nonUniqueKey 异常,但 merge 工作正常。

【讨论】:

  • 在使用 和 hibernate envrs 4.2.18.Final 后遇到同样的问题,我正在使用 JBoss 事务管理器。你能帮我解决这个问题吗?
猜你喜欢
  • 2018-09-19
  • 2023-03-24
  • 1970-01-01
  • 2015-03-14
  • 2015-08-20
  • 1970-01-01
  • 2015-12-14
  • 2016-03-19
  • 1970-01-01
相关资源
最近更新 更多