Как ввести JPA EntityManager с помощью пружины - PullRequest
40 голосов
/ 11 марта 2010

Можно ли Spring внедрить объект JPA entityManager в мой класс DAO без расширения 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>

Ответы [ 3 ]

32 голосов
/ 11 марта 2010

Да, хотя он полон ошибок, поскольку 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.

12 голосов
/ 11 марта 2010

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

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

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

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

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

3 голосов
/ 22 января 2013

Последние версии Spring + JPA решают эту проблему принципиально. Вы можете узнать больше, как использовать Spring и JPA вместе в отдельном потоке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...