2014-09-04 71 views
0

我正在尝试将Envers集成到我的项目中。我使用Hibernet-envers 3.5.5-Final,Hibernet-core 3.5.5-Final,spring 3.0.7.RELEASE。Envers不插入记录

对于DAO Layer,我使用的是GenericDaoHibernate类。

我的applicationContext.xml包含:

<property name="eventListeners"> 
        <map> 
        <entry key="post-insert" > 
         <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
        <entry key="post-update"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="post-delete"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="pre-collection-update"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="pre-collection-remove"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="post-collection-recreate"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        </map> 
       </property> 

的注释类的审计表的创建,但通过添加或在实体表更新一行,没有行插入_AUD表或在REVINFO。

所以,我增加了一个新的监听org.hibernate.ejb.event.EJB3PostInsertEventListener为:

<property name="eventListeners"> 
       <map> 
       <entry key="post-insert" > 
      <list> 
      <bean class="org.hibernate.envers.event.AuditEventListener" /> 
      <bean class="org.hibernate.ejb.event.EJB3PostInsertEventListener" /> 
      </list> 
     </entry> 
       <entry key="post-update"> 
       <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
       <entry key="post-delete"> 
       <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
       <entry key="pre-collection-update"> 
       <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
       <entry key="pre-collection-remove"> 
       <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
       <entry key="post-collection-recreate"> 
       <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
       </map> 
      </property> 

的问题仍然存在,现在没有记录插入到实体表。

任何建议是值得欢迎的。

谢谢。

回答

1

好的。

我解决了这个问题。我们不需要org.hibernate.ejb.event.EJB3PostInsertEventListener,所以在我们的ApplicationContext-config.xml中,我们应该只有这个配置:

<property name="eventListeners"> 
        <map> 
        <entry key="post-insert" > 
         <bean class="org.hibernate.envers.event.AuditEventListener" /> 
       </entry> 
        <entry key="post-update"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="post-delete"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="pre-collection-update"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="pre-collection-remove"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        <entry key="post-collection-recreate"> 
        <bean class="org.hibernate.envers.event.AuditEventListener" /> 
        </entry> 
        </map> 
       </property> 

其次,在我们的情况下,我们的项目使用两个transction经理,所以注释@Transactionnal的服务,我们不得不提到使用了适当的事务管理器的名字,这意味着所有的服务应该被注释为@Transactionnal (值= “NAME_TX_MANAGER”)。这个问题的根源在于,如果我们有一个自动提交(如果我理解了它的文档),Envers就不能正常工作。

我希望如果面对同样的困难,可能会对其他访问者有所帮助。