2014-09-04 148 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就不能正常工作。

我希望如果面對同樣的困難,可能會對其他訪問者有所幫助。