【发布时间】:2014-09-25 19:03:32
【问题描述】:
我正在从 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 的事务管理器?
【问题讨论】:
-
@Amogh 是的。我的解决方案是完全放弃休眠拦截器并将其转换为 JPA 侦听器。这样也干净一点。