小编典典

Envers不插入记录

hibernate

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

对于DAO层,我使用的是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>

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

任何建议都欢迎。

谢谢。


阅读 258

收藏
2020-06-20

共1个答案

小编典典

好。

我解决了问题。

首先,似乎在Hibernate核心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
=“ NAME_TX_MANAGER”) 。此问题的根源在于,如果我们有自动提交功能(如果我对它的文档了解得很好),则Envers无法正常工作。

如果面临同样的困难,希望对其他访客有帮助。

2020-06-20