Spring + JPA @Transactional没有提交

时间:2011-03-05 03:39:15

标签: spring

我理解此前已经提出了类似的问题,但我无法找到解决问题的方法。基本上,我试图在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"/>

3 个答案:

答案 0 :(得分:1)

看起来像潜在问题的第一件事是传播的设置。以下是显示您可以指定的值的文档:

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/annotation/Propagation.html

请注意,您已指定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注释