JPA和Hibernate在同一个春季项目中

时间:2016-05-26 22:14:43

标签: hibernate jpa spring-data spring-data-jpa

处理一个庞大复杂的应用程序,该应用程序目前正在使用Hibernate LocalSessionFactoryBean,HibernateTransactionManager和HibernateTemplate。是否有可能我可以将JPA用于我的新功能开发,以便我可以使用SPRING DATA JPA来处理我的持久层?我目前的配置如下。

    <bean id="hibernateSessionFactory" destroy-method="destroy"
          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="mappingLocations">
            <list>
                <value>classpath*:/hbm/*.hbm.xml</value>
                <value>classpath*:/hid-hbm/*.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> -->
                <prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
            </props>
        </property>
        <property name="dataSource">
            <ref bean="myDataSource" />
        </property>
    </bean>

   <bean id="transactionManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="hibernateSessionFactory"/>
    </bean>

   <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="hibernateSessionFactory" />
   </bean>

但是,我想为新东西添加LocalContainerEntityManagerFactoryBean,JpaTransactionManager。这两个都可以存在于同一个项目中吗?

<bean
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactory">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean class="org.springframework.orm.jpa.JpaTransactionManager"
    id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

1 个答案:

答案 0 :(得分:0)

简短回答......是的,只要你将两个实现完全隔离,你就可以混合使用。

这也使您能够在将来的日期将“遗留”hibernate DAO迁移到Spring Data。

浏览你的代码,这一切看起来都不错,但我不确定当你的服务需要来自两个实现的DAO / Repos时,事务管理将如何表现。