2

我在 Spring 中使用 Hibernate 提供程序为 JPA 提供了一个工作配置:

<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>

我怎样才能让它并排工作?

4

1 回答 1

0

“没有进行中的事务”只是意味着您正在尝试在某处使用 EntityManager 并且您没有先启动事务。堆栈跟踪将告诉您确切的位置。由于您使用的是注释驱动的事务,因此只需确保您@Transactional在异常发生位置的调用链上的某个位置有适当的位置。

于 2013-01-28T17:22:52.120 回答