2014-04-01 74 views
4

似乎在使用Play Framework 2.2.2和eBean ORM時,@ play.db.ebean.Transactional 在引發Exception時沒有回滾事務。播放2.2.2 @Bean事務處理在拋出Exception時沒有回滾事務

您是否有人對此問題有所瞭解以及如何解決?

我看到eBean在他們的avaje-ebeanorm-agent 3.2.2中有一個關於這個問題的BUG。 :https://github.com/ebean-orm/avaje-ebeanorm/pull/44它是固定在版本avaje-ebeanorm 3.2.3 也玩2.2.2似乎使用avaje-ebeanorm-agent 3.2.2,當我在 更改爲更高版本Built.scala(3.2.5)一些崩潰與使用的JPA註釋出現了(像OrphanRemoval不被識別)

PS與Play 2.1.1,play 2.1.1: Unable to rollback transaction with ebean orm有類似的討論,但沒有明確解決使用@Transactional in Action中的問題。

回答

3

我遇到過類似的問題,但是我只用打版2.3.7:

我注意到,有包含事務的註釋兩種不同的庫測試:@com.avaje.ebean.annotation.Transactional@play.db.ebean.Transactional

顯然,它們中的每一個只能在某種類中工作,並且在使用錯誤時不會執行回滾。這是我發現的測試:

  • @com.avaje.ebean.annotation.Transactional: 僅適用於方法,代表了模型類,即他們有@javax.persistence.Entity註解。然而,ebean增強中似乎存在一個錯誤,這導致類別always recompile although no changes were made
  • ebean's documentation給出了另外兩種實現交易的方式,例如,你可以使用try/finally塊。在我的測試中,這種方式一直運行良好,並且執行了回滾。
  • @play.db.ebean.Transactional:僅適用於動作,即類來源於play.mvc.Controller。我不確定這種行爲是否有意,但documentation of play-framework只討論事務性動作,並沒有提及模型類。