【问题标题】:Play 2.2.2 @Transactional of eBean does not rollback transaction in Exception thrown播放 2.2.2 eBean 的@Transactional 在抛出异常时不回滚事务
【发布时间】:2014-05-12 19:08:23
【问题描述】:

似乎在将 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)

附:与 Play 2.1.1 有类似的讨论,play 2.1.1: Unable to rollback transaction with ebean orm,但没有找到明确解决使用 @Transactional in Action 的问题。

【问题讨论】:

    标签: scala playframework playframework-2.0 ebean


    【解决方案1】:

    我也遇到过类似的问题,不过我只用 play 版本 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
    • ebean's documentation 提供了另外两种实现事务的方式,例如您可以使用 try/finally 块。在我的测试中,这种方式一直运行良好,并且执行了回滚。
    • @play.db.ebean.Transactional:仅适用于操作,即该类派生自 play.mvc.Controller。我不确定这种行为是否有意,但documentation of play-framework 只谈论事务性动作,根本没有提及模型类。

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2011-09-18
      • 1970-01-01
      • 2022-07-22
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多