似乎在将Play Framework 2.2.2与eBean ORM一起使用时,@ play.db.ebean.Transactional 抛出异常时不回滚事务。
您是否有人对该问题有所了解以及如何解决该问题?
我看到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一样无法识别)
P.S。与Play 2.1.1 play 2.1.1: Unable to rollback transaction with ebean orm有类似的讨论,但没有明确解决在操作中使用@Transactional的问题。
答案 0 :(得分:5)
我遇到了类似的问题,但是我只测试了游戏版本2.3.7。:
我注意到有两个不同的库包含Transactional-annotation:@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 @play.db.ebean.Transactional
:仅适用于操作,即该类派生自play.mvc.Controller
。我不确定这种行为是否有意,但documentation of play-framework只讨论交易操作,并且根本没有提及模型类。