我们有一个spring 3应用程序,该应用程序仍然使用不推荐使用HibernateTemplate的持久性,并且想要迁移到更现代的JPA EntityManager。
HibernateTemplate
EntityManager
是否可以在迁移过程中同时使用两个API(可能甚至在一个事务中同时使用两个API),以便我们可以分步进行迁移?
还是我们必须大爆炸?
当然可以,为什么不呢。
最简单的方法是删除LocalSessionFactoryBean和HibernateTransactionManager配置,LocalContainerEntityManagerFactoryBean并JpaTransactionManager分别用和替换它。
LocalSessionFactoryBean
HibernateTransactionManager
LocalContainerEntityManagerFactoryBean
JpaTransactionManager
然后,以获得SessionFactory附加的HibernateJpaSessionFactoryBean,它公开的基本SessionFactory的EntityManagerFactory。
SessionFactory
HibernateJpaSessionFactoryBean
EntityManagerFactory
这样,两种技术应该和平共处。
有报道说这样做会导致异常No CurrentSessionContext configured!。如果得到它,请将以下内容添加到您的persistence.xml
No CurrentSessionContext configured!
persistence.xml
<property name="hibernate.current_session_context_class" value="org.springframework.orm.hibernate4.SpringSessionContext"/>
或jpaProperties的LocalContainerEntityManagerFactoryBean。
jpaProperties
<property name="jpaProperties"> <props> <prop name="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> <props> <property>