我理解此前已经提出了类似的问题,但我无法找到解决问题的方法。基本上,我试图在Spring中通过Hibernate使用JPA,但由于某种原因,数据不持久存在。在spring事务上调试时没有显示任何内容 - EntityManager打开和关闭,但没有显示为交易经理担心...我相信我会错过一些大的东西,任何帮助都表示赞赏!有关详细信息,请参阅以下内容。
TIA
奥利弗
基本布局如下:class FooDaoJPA
的save函数调用entityManager.persist(object)
来保持对象。
class FooServiceImpl
通过以下方式实现服务接口:
@Transactional(rollbackFor = DataAccessException.class,
readOnly = false, timeout = 30,
propagation = Propagation.SUPPORTS,
isolation = Isolation.DEFAULT)
public void saveFoo(Foo foo) throws DataAccessException {
fooDao.save(foo);
}
注意到{I}注入了fooDao
最后,控制器注入一个FooService
并调用saveFoo()
来保存数据。
JPA配置
<!-- JPA Entity Manager Factory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="feDataSource"/>
<!-- Transaction Config -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
<tx:annotation-driven mode="aspectj"
transaction-manager="transactionManager"/>
答案 0 :(得分:1)
看起来像潜在问题的第一件事是传播的设置。以下是显示您可以指定的值的文档:
请注意,您已指定SUPPORTS“支持当前事务,如果不存在则执行非事务性”。您可能需要,这是默认值,并且将使用现有事务或创建一个(如果当前不存在)。
答案 1 :(得分:1)
请注意配置中的mode="aspectj"
。它需要额外的配置,通常你不应该使用它,除非你明白它是什么意思,为什么你需要它。请参阅10.5.6 Using @Transactional。
答案 2 :(得分:0)
就我而言:
将JPA与Spring MVC一起使用 - 我的所有测试和代码运行良好而没有错误 - 症状是,无论我尝试什么,提交都不会保存到数据库中。
我不得不补充一下 到我的applicationContext.xml和cglib-nodep-2.1_3.jar aopalliance-1.0.jar
我的情况肯定是修复。没有注释驱动的Spring将不会扫描@Transactional注释