我有一个Spring+JPA(Hibernate)项目,在那里我连接到
MsSQL
数据库,现在我需要打开一个新的连接,但这次将是
MySQL
. 我正在使用XML配置
<bean id="hibernateJpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${spring.datasource.driverClassName}" />
....
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource" p:packagesToScan="com.wsg.admin.api.model"
p:jpaVendorAdapter-ref="hibernateJpaVendorAdapter">
<property name="jpaProperties">
<props>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
....
</props>
</property>
<property name="persistenceUnitName" value="dataSourcePU" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="enduserDataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${enduser.db.driver}" />
....
</bean>
<bean id="enduserEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="enduserDataSource" p:packagesToScan="com.wsg.admin.api.model"
p:jpaVendorAdapter-ref="hibernateJpaVendorAdapter">
<property name="jpaProperties">
<props>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
....
</props>
</property>
<property name="persistenceUnitName" value="enduserDataSourcePU" />
</bean>
<tx:annotation-driven transaction-manager="enduserTransactionManager" />
<bean id="enduserTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="enduserEntityManagerFactory" />
</bean>
然后我尝试使用片段注入entityManager
@PersistenceContext(unitName="dataSourcePU")
EntityManager entityManager;
@PersistenceContext(unitName="enduserDataSourcePU")
EntityManager endUserEntityManager;
它只适用于第一个数据库,但当尝试在第二个数据库上持久化时,它返回错误
javax.persistence.TransactionRequiredException: no transaction is in progress
我试着用注释这个方法(其中包含persist()调用)
@Transactional("transactionManager")
一次,和
@Transactional(value = "enduserTransactionManager")
另一次,第二个entityManager总是抛出相同的异常
我试图将persist()调用分离到不同的方法中,并对这两个方法中的每一个都进行了注释
@交易(“transactionManager”)
和
@事务性(value=“enduserTransactionManager”)
@Transactional(value = "enduserTransactionManager")
private void createNewBrandMySQL(Brand newBrand) {
和
@Transactional("transactionManager")
public Integer createNewBrand(Brand newBrand) throws EntityDoesntExistException {