gpt4 book ai didi

java - 如何将 Hibernate 实体拦截器与 JPA 事务管理器一起使用?

转载 作者:行者123 更新时间:2023-11-30 07:07:11 32 4
gpt4 key购买 nike

我正在从 Spring 应用程序转换基于 XML 的配置。这是配置的一部分在 XML 中的样子:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL82Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!--<prop key="hibernate.hbm2ddl.auto">create-drop</prop> -->
</props>
</property>
<property name="packagesToScan" value="net.vivin" />
</bean>

<bean id="timeStampedEntityInterceptor" class="net.vivin.myapp.hibernate.interceptor.TimeStampedEntityInterceptor" />

<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"
p:entityInterceptor-ref="timeStampedEntityInterceptor">
</bean>

看了this answer之后,我可以看到最佳实践是使用 JPA 事务管理器而不是 Hibernate 的事务管理器。

我想不通的是如何在 JPA 事务管理器上设置实体拦截器。有谁知道如何做到这一点?基于 XML 的配置也很好,因为我可以将其转换为 Java。在我的 Java 配置中,对于事务管理器,我只有:

@Bean
public PlatformTransactionManager getTransactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
return jpaTransactionManager;
}

但是,JpaTransactionManager 没有设置拦截器的方法。有谁知道如何做到这一点?还是我只需要使用 Hibernate 的事务管理器?

最佳答案

事实证明,我的做法完全错了。解决方案不是尝试在我的代码中使用 Hibernate 实体拦截器。我选择改用 JPA 监听器,并在我的实体上使用了 @EntityListeners 注释。这本质上具有与拦截器相同的功能。

关于java - 如何将 Hibernate 实体拦截器与 JPA 事务管理器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099491/

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