Действительно ли возможно иметь 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>
Да, хотя здесь много подводных камней, поскольку 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.
Можно ли использовать 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
.