Я ранее имел этот конфиг для Hibernate с использованием РЕСУРС-LOCAL Тип сделки:Настройка Spring + Hibernate JPA Менеджер транзакций через JTA
persistence.xml:
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
</persistence-unit>
ApplicationContext (DATAACCESS бит):
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory"></bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="persistenceUnitName" value="myPU"/>
<property name="jpaProperties">
<props>
<prop key="javax.persistence.validation.mode">none</prop>
</props>
</property>
</bean>
<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<!-- Are there any other properties required? -->
</bean>
<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/CNTXESDB" />
<property name="lookupOnStartup" value="true" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.sql.DataSource" />
</bean>
Но этот вид сделки кажется чтобы не работать с Glassfish, поэтому мне пришлось переключиться на транзакции JTA.
Проблема заключается в том - чтобы получить Spring для управления созданием транзакций (через @Transactional) Мне нужно, чтобы определить TransactionManager
боб, но JtaTransactionManager
включены в весенне-ОМ не принимает EntityManagerFactory боба, поэтому он не знает, где EntityManager для того, чтобы открыть/закрыть/снять сеанс Hibernate.
Как настроить Spring с Hibernate для использования транзакций JTA?
EDIT: получается, вам может использование RESOURCE_LOCAL сделок с Glassfish, но почему-то вы не можете иметь файл persistence.xml. Я переименовал этот файл my_persistence.xml
и настроен LocalContainerEntityManagerFactoryBean
так:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="persistenceUnitName" value="myPU"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/my_persistence.xml" />
<property name="jpaProperties">
<props>
<prop key="javax.persistence.validation.mode">none</prop>
</props>
</property>
</bean>
Я предлагаю переименовать компонент '<боб ID = "EntityManager"' может быть проблема .. В любом случае [следовать этот учебник] (http://softwarecave.org/2014/03/15/using-jpa-and-jta-with-spring /) – Xstian
Очевидно, что это не сработает. Вы указали, что хотите использовать JTA, но при настройке yuour используйте локальные транзакции. Либо измените свой 'persistence.xml', либо правильно настройте транзакции JTA. –
@ M.Deinum, что я прошу, заключается в следующем: как правильно его настроить –