Envers不插入记录 [英] Envers doesn't insert records
问题描述
对于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屋!