Как ввести JPA EntityManager, использующий пружину

Действительно ли возможно иметь Spring, вводят JPA entityManager объект в мой класс ДАО без расширения JpaDaoSupport? Если да, Spring справляется с транзакцией в этом случае?

Я пытаюсь сохранить свою конфигурацию Spring максимально простой:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="em"/>
</bean>
<bean id="em" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="myPU"/>
</bean>
41
задан Rene Knop 16 November 2018 в 21:14
поделиться

2 ответа

Да, хотя здесь много подводных камней, поскольку JPA немного своеобразен. Очень стоит прочитать документацию по внедрению JPA EntityManager и EntityManagerFactory без явных зависимостей Spring в вашем коде:

http://static.springsource.org/spring/docs /3.0.x/spring-framework-reference/html/orm.html#orm-jpa

Это позволяет либо ввести EntityManagerFactory , либо внедрить поточно-безопасный транзакционный прокси-сервер EntityManager напрямую. Последнее упрощает код, но означает, что требуется больше сантехники Spring.

32
ответ дан 27 November 2019 в 00:52
поделиться

Можно ли использовать Spring для внедрения объекта JPA entityManager в мой класс DAO без расширения JpaDaoSupport? если да, управляет ли Spring транзакцией в этом случае?

Это задокументировано черным по белому в 12.6.3. Реализация DAO на основе простого JPA :

Можно написать код для простого JPA без использования каких-либо зависимостей Spring , используя внедренный EntityManagerFactory или EntityManager . Обратите внимание, что Spring может понимать @PersistenceUnit и @PersistenceContext аннотации на уровне поля и метода, если включен PersistenceAnnotationBeanPostProcessor . Соответствующая реализация DAO может выглядеть так (...)

А что касается управления транзакциями, посмотрите 12.7. Управление транзакциями :

Spring JPA позволяет настроенному JpaTransactionManager предоставлять транзакцию JPA коду доступа JDBC, который обращается к тому же источнику данных JDBC, при условии, что зарегистрированный JpaDialect поддерживает извлечение базового соединения JDBC. По умолчанию Spring предоставляет диалекты для реализаций Toplink, Hibernate и OpenJPA JPA. См. Следующий раздел для получения подробной информации о механизме JpaDialect .

12
ответ дан 27 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: