当前位置: 首页 > 知识库问答 >
问题:

JPA和Hibernate在同一个spring项目中

史英飙
2023-03-14

正在处理一个庞大复杂的应用程序,该应用程序目前正在使用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个答案

尚声
2023-03-14

简短回答...是的,只要保持两个实现完全隔离,您就可以混合和匹配这两个实现。

这也将使您能够在将来将“遗留”hibernate DAO迁移到Spring数据。

浏览您的代码,我觉得这一切都很好,但我不确定当您的服务需要来自两个实现的DAOS/Repo时,事务管理将如何表现。

 类似资料:
  • 我有一个父POM项目,它将spring版本声明为3.2,将hiberate实体管理器版本声明为4.1.1(让我们称之为parent,P)。我有另一个项目,它是这个父级的子级,并继承了提到的依赖项管理(让我们将子级称为C1)。我正在构建一个新的项目,我希望该项目对所提到的父级的子级有影响,并且也依赖于子级C1,(让我们把这个新的子级称为C2)。 父P1(父Pom项目,声明spring 3.2和hib

  • 我很难决定是否应该坚持使用Hibernate来完成一个新的项目,还是使用JPA和新的spring数据实现。 spring数据框架是用于大型项目还是具有适度查询需求的小型项目? 虽然我肯定看到了使用注释在减少代码方面的优势,但是对于动态查询您要做什么呢?当您想要实现一个相当复杂的save()方法时呢? 文档中说要创建一个您的主存储库实现的自定义接口和实现,但是如果您需要访问crud存储库本身上的任何

  • 我刚刚学会了spring和hibernate,当我锻炼的时候,我有一些错误,如下所示: 这是我的hibernate.xml 这是我的pom.xml 我已经试图解决这个错误,但还没有修复它,那么有人能帮我吗?

  • Spring Data JPA不是一个JPA实现,它是对数据库数据访问的抽象。我不能理解这种表达方式与JPA的实现(比如Hibernate)进行比较。在使用Spring Data JPA时,要使用CRUD操作,必须从CrudRepository接口进行扩展。但是没有Hibernate,Spring Data JPA无法独立工作,因为它无法将java对象转换为实体。但是!Hibernate还可以执行

  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 我想知道Spring boot JPA是如何使用hibernate的,Spring boot JPA和hibernate之间有什么关系吗?当我们使用boot jpa时,我们只是实现了org.springframework.data.jpa.repository.jparepository接口,可以使用与列名匹配的函数名编写查询,也可以编写自定义查询,那么hibernate在这里的角色是什么?我们怎