gpt4 book ai didi

java - HibernateTemplate 是否与 Envers 一起使用?如果是这样,如何?

转载 作者:行者123 更新时间:2023-12-04 07:02:24 24 4
gpt4 key购买 nike

我正在尝试在一个也使用 Hibernate 和 Spring 的项目中使用 Envers - 我非常感谢 HibernateTemplate 提供的代码减少。

我在 JPA 下配置了 Envers,经过一些调整后,我能够让 EnversHibernateToolTask​​ Ant 任务(包括审计表)生成模式。但是,当我编写代码时,例如:

    hibernateTemplate.saveOrUpdate(f);

数据被持久化,但没有进入审计表。相反,如果我写:
    EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(f);
em.getTransaction().commit();

然后数据进入审计表(但我更愿意使用以前的语法 - 我知道使用 JPA 的 EntityManager 将代码与 Hibernate 分离,但它简单并没有带来麻烦 - 改变 ORM 引擎并不是我最疯狂的梦想项目。)

检查我的 applicationContext.xml 可能会有所帮助配置:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="projetox" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.w2it.projetox.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
...
</bean>

这是我的 persistence.xml设置:
<persistence-unit name="projetox" transaction-type="RESOURCE_LOCAL">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<!-- Hibernate Envers -->
<property name="hibernate.ejb.event.post-insert"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-update"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-delete"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-update"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-remove"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-collection-recreate"
value="org.hibernate.envers.event.AuditEventListener" />
</properties>
</persistence-unit>

有没有人对这里发生的事情有任何暗示?谢谢!

最佳答案

HibernateTemplate 有对应的 JPA,JpaTemplate它提供了相当相似的功能。

Envers 不能与 HibernateTemplate 一起工作的原因是它依赖于使用 EntityManager 时触发的 JPA 事件(您可以在上面的 persistence.xml 中看到声明的监听器)。理论上可以编写代码来在使用 HibernateTemplate 时从 Hibernate session 触发这些事件,但它相当复杂。

关于java - HibernateTemplate 是否与 Envers 一起使用?如果是这样,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com