Envers不会插入记录

时间:2014-09-04 11:12:17

标签: spring hibernate

我试图将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。

对于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 个答案:

答案 0 :(得分:1)

行。

我解决了这个问题。

Firstibale,似乎使用Hibernate-core 3.5.5-Final,我们不需要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>

其次,在我们的案例中,我们的项目使用两个转换管理器,因此对于注释@Transactionnal的服务,我们必须提到所使用的正确事务管理器的名称,这意味着所有服务都应注释为@Transactionnal(value =& #34; NAME_TX_MANAGER&#34)。这个问题的根源是,如果我们有自动提交,Envers就无法正常工作(如果我理解其文档的话)。

如果遇到同样的困难,我希望对其他访客有帮助。