2011-03-05 82 views
6

我瞭解在此之前已經詢問過類似問題,但找不到解決方案。基本上,我試圖在Spring中通過Hibernate使用JPA,但數據是而不是由於某種原因被持久化。在spring事務上調試時沒有顯示任何內容 - EntityManager打開和關閉,但沒有任何事情顯示出事務管理器的問題...我相信我錯過了一些大事,任何幫助表示讚賞!請參閱以下內容瞭解更多詳情。Spring + JPA @Transactional沒有提交

TIA

奧利弗

基本佈局如下:類FooDaoJPA的保存功能調出entityManager.persist(object)堅持的對象。

類​​通過實現服務接口:

@Transactional(rollbackFor = DataAccessException.class, 
        readOnly = false, timeout = 30, 
        propagation = Propagation.SUPPORTS, 
        isolation = Isolation.DEFAULT) 
public void saveFoo(Foo foo) throws DataAccessException { 
     fooDao.save(foo); 
} 

注意到fooDao由Spring IoC來注入

最後控制器注入了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

刪除rollbackFor = DataAccessException.class和帶有try catch的surround dao調用以進行調試 – blob 2011-03-05 14:09:57

回答

1

請注意您的配置中的mode="aspectj"。它需要額外的配置,通常你不應該使用它,除非你明白它是什麼意思,你爲什麼需要它。見10.5.6 Using @Transactional

+0

雖然答案並不直接解決問題,但我認爲「aspectj」及其相關配置(做加載時織造)是問題的罪魁禍首。謝謝你的幫助。 – Oliver 2011-03-05 22:27:33

1

,看起來像一個潛在的問題是你的傳播設置的第一件事情。這裏是證明文件,你可以指定值:

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

請注意,您所指定的支承着「支持當前事務,執行非事務如果不存在」。您可能希望使用REQUIRED,這是默認設置,並且可以使用現有事務,或者創建一個當前不存在的事務。

+0

首先,thx用於答覆。雖然你的建議是有道理的,但我嘗試了傳播所需,它似乎沒有什麼區別。另外,我從Apress的書「Spring JPA的持久性」中得到的原始設置 - 但是這本書中存在許多錯字/不一致之處,我也不會在這個設置上下注。 – Oliver 2011-03-05 05:19:32

0

在我的情況:

使用JPA與Spring MVC - 我所有的測試和代碼沒有錯誤運行良好 - 症狀是提交將根本就沒有保存到數據庫中,無論是我的嘗試。

我必須在我的情況下加 我的applicationContext.xml和CGLIB的節點p-2.1_3.jar aopalliance-1.0.jar

絕對的修補程序。沒有註釋驅動Spring不會掃描@Transactional註釋

相關問題