2

Hibernate プロバイダーを使用した JPA の Spring で動作する構成があります。

<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 に答える