当前位置: 首页 > 面试题库 >

Envers不插入记录

桓深
2023-03-14
问题内容

我正在尝试将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>

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

任何建议都欢迎。

谢谢。


问题答案:

好。

我解决了问题。

首先,似乎在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无法正常工作。

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



 类似资料:
  • OrientDB是一个NoSQL数据库,可以存储文档和面向图形的数据。 NoSQL数据库不包含任何表,那么要如何将数据作为记录插入?在这里,您可以以类,属性,顶点和边的形式查看表数据,类表就像表,属性就像表中的文件。 可以在OrientDB中使用模式定义所有这些实体。 属性数据可以被插入到一个类中。 插入命令在数据库模式中创建一条新记录。 记录可以无模式或遵循一些指定的规则。 以下语句是“插入记录

  • 本章提供了有关如何使用JDBC应用程序在表中插入记录的示例。 在执行以下示例之前,请确保您已满足以下条件 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the packages:要求包含包含数据库编程所需的JDBC类

  • 我使用Hibernate 4.0与envers 当我做更新或插入时,数据被保存到审计表中,模式为0和1 我想在插入后禁用审核。有人能告诉我如何禁用它吗。 我从4.0版本中读到了Hibernate,它会自动注册事件进行审计。 我想知道有什么方法可以禁用insert上的审核?

  • 目前我正在从pojos列表映射到记录,我希望能够一次插入多行。我如何在JOOQ中用一个事务做到这一点? 我曾尝试将列表放入“值”中,但出现异常“值的数量必须与字段的数量匹配”

  • 我的php代码: 当我使用echo而不是mysql_query时,它返回: 它在我的phpmyadmin上运行得很好,但是当我将echo更改为mysql_query时,它只影响5行(两个表) P1_1-K1 P1_1-K4 P1_1-K3 P1_1-K2 P12-K1 我的完整数据库 --版本4.3.11 --主机:127.0.0.1--生成时间:2015年7月23日下午12:16--服务器版本:

  • 我只想使用hibernate envers来审计我的实体。我使用Envers-1.2.2.ga-hibernate-3.3.jar、Hibernate-Annotations-3.5.6-final.jar、Hibernate-Core-3.5.2-final.jar和Hibernate-JPA-2.0-API-1.0.0.final.jar。 我的实体在下面 user.java 这是我配置了en