我在Spring for JPA和Hibernate提供程序中有一个工作配置:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:annotation-driven mode="aspectj"/>
<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/>
此配置适用于基于Spring的小型Web应用程序。
但是,当我将相同的配置插入到其他现有的基于Spring的Web应用程序中时,我会遇到以下异常:
javax.persistence.TransactionRequiredException:没有正在进行的交易
我认为它与Spring JDBC模板存在一些冲突:
<bean id="mysqlTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
我怎样才能让它并肩工作?
答案 0 :(得分:0)
“没有正在进行的事务”只是意味着您尝试在某处使用EntityManager并且您没有首先启动事务。堆栈跟踪将告诉您确切的位置。由于您正在使用注释驱动的事务,因此只需确保在发生异常的位置的调用链上某处有适当的@Transactional
。