【发布时间】:2013-01-28 17:00:47
【问题描述】:
我在 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>
我怎样才能让它同时工作?
【问题讨论】:
-
看看stackoverflow.com/questions/1801828/…这里的答案是否有帮助?
-
我们发现 JdbcTemplate 不会影响 JPA Hibernate。这可能是由于 Spring ContextLoaderListener 和 DispatcherServlet 配置错误造成的。但是什么?
-
尝试将 entityManagerFactory 的属性引用放入 jpaTransactionManager 中,例如:
看看是否遗漏了配置
标签: spring hibernate jpa-2.0 entitymanager jdbctemplate