Java 如何从Spring上下文中配置的EntityManager获取连接?
我想从spring上下文中配置的EntityManager获取连接,以便在dbunit DatabaseOperation.CLEAN_INSERT.execute方法中使用它 以下是Spring配置:Java 如何从Spring上下文中配置的EntityManager获取连接?,java,spring,jpa,transactions,dbunit,Java,Spring,Jpa,Transactions,Dbunit,我想从spring上下文中配置的EntityManager获取连接,以便在dbunit DatabaseOperation.CLEAN_INSERT.execute方法中使用它 以下是Spring配置: <bean id="testmEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <qualifier value="test
<bean id="testmEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<qualifier value="testm" type="org.springframework.beans.factory.annotation.Qualifier"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaDialect"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/></property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
<property name="jpaVendorAdapter" ref="jpaAdapter"/>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:mem:test;IGNORECASE=TRUE;">
<property name="autoCommit" value="false"/>
<property name="suppressClose" value="true"/>
</bean>
<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
<tx:annotation-driven transaction-manager="testmTransactionManager"/>
<bean id="testmTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<qualifier value="testm"/>
<property name="entityManagerFactory" ref="testmEntityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
我收到异常org.hibernate.SessionException:会话已关闭代码>
当我使用emager.getTransaction().begin()时代码>
我得到java.lang.IllegalStateException:不允许在共享EntityManager上创建事务-改用Spring事务或EJB CMT
已解决:
已使用数据源获取它:
@Autowired
private DataSource dataSource;
及
在Spring中有两种使用事务的标准方法:
在方法上使用@Transactional
注释
使用方法
第二种方法使您可以使用单个方法执行多个事务。您不必手动启动和停止事务
数据库连接仅在spring事务单元中处于活动状态,因此在@Transactional
方法中,或者在TransactionTemplate.execute()的回调方法中,为什么?只需使用数据源获取它。。。
@Autowired
private DataSource dataSource;
dataSource.getConnection ()