Envers不插入记录 [英] Envers doesn't insert records

查看:80
本文介绍了Envers不插入记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将Envers整合到我的项目中。我使用Hibernet-envers 3.5.5-Final,Hibernet-core 3.5.5-Final,spring 3.0.7.RELEASE。

对于DAO Layer, m使用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 as:

 < 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>

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



欢迎任何建议。



谢谢。

解决方案好的。

我解决了这个问题。

首先,似乎用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 =NAME_TX_MANAGER)。这个问题的根源是,如果我们有一个自动提交(如果我理解了它的文档),Envers不能正常工作。



我希望这可能会有帮助对于其他游客如果面临同样的困难。

I'm trying to integrate Envers in my project. I'm using Hibernet-envers 3.5.5-Final, Hibernet-core 3.5.5-Final, spring 3.0.7.RELEASE.

For DAO Layer, I'm using a GenericDaoHibernate class.

My applicationContext.xml contains:

<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>

The audit tables for the annotated classes are created, but by adding or updating a row in the entity table, no row is inserted in the _AUD tables or in the REVINFO.

So, I added a new listener org.hibernate.ejb.event.EJB3PostInsertEventListener as :

<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>

The problem persists, and now no record is inserted in the entity tables.

Any suggestion is welcome.

Thanks.

解决方案

OK.

I solved the problem.

Firstibale, it seems that with the Hibernate-core 3.5.5-Final, we don't need org.hibernate.ejb.event.EJB3PostInsertEventListener, so in our ApplicationContext-config.xml we should have just this config :

<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>

Secondly, in our case our project uses two transction managers, so for the services annotated @Transactionnal we have to mention the name of the proper transaction manager used, that means that all services should be annotated as @Transactionnal(value="NAME_TX_MANAGER"). The source of this problem is that Envers doesn't work properly if we have an auto-commit (If I understood well its documentation).

I hope that may be helpful for the other visitors if the face the same difficulties.

这篇关于Envers不插入记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆