Как использовать Spring JPA и Hibernate вместе в одном приложении? - PullRequest
0 голосов
/ 08 мая 2018

Я использую Hibernate 5 и Spring 5, и мы хотим, чтобы наше приложение использовало и Hibernate и Spring JPA вместе.

Как настроить менеджеры транзакций для обеих этих вещей в файле applicationContext.xml и использовать их в приложении?

То же самое для компонентов, таких как менеджеры сущностей и сеансы?

Спасибо

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

JPA - это спецификация, а hibernate - одна из реализаций JPA. Не уверен, что именно вы спрашиваете. Если вы используете Hibernate, вы настроите диспетчер транзакций сеанса.

, например

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=${hibernate.dialect}
        </value>
    </property>
</bean>

<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
0 голосов
/ 08 мая 2018
  1. Spring JPA является стандартом, и есть поставщики, предоставляющие его реализацию. Hibernate является одним из них. Так что в основном вы можете просто использовать JPA вместо смеси обоих.

  2. Для менеджера транзакций вы можете определить их следующим образом

// Hibernate

<bean id="txManager"    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

// JPA может использовать это для да

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

Подробнее: https://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html

  1. Для bean-компонентов вы указываете папку / путь (packagesToScan), в которой JPA должен искать аннотированные bean-компоненты для сопоставления их с БД.

    <bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      p:dataSource-ref="dataSource"
      p:packagesToScan="${jpa.entity.packages}">
    
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
              p:showSql="${hibernate.show_sql}"/>
    </property>
    
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
    

0 голосов
/ 08 мая 2018

Вы не можете использовать оба из них в одном приложении.

Однако все функциональные возможности hibernate 5 также могут быть реализованы с помощью JPA. Можете ли вы быть более конкретным относительно того, зачем вам нужны оба

...