gpt4 book ai didi

scala - 玩2.2.2 eBean的@Transactional在抛出Exception时不回滚事务

转载 作者:行者123 更新时间:2023-12-03 02:27:24 25 4
gpt4 key购买 nike

似乎当将 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 ,但没有找到在 Action 中使用 @Transactional 的问题的明确解决方案。

最佳答案

我遇到了类似的问题,但我只测试了 play 版本 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 block 。在我的测试中,这种方式一直运行良好,并且执行了回滚。
  • @play.db.ebean.Transactional:仅适用于操作,即该类派生自 play.mvc.Controller。我不确定这种行为是否是有意为之,但 documentation of play-framework仅讨论事务操作,根本没有提及模型类。

关于scala - 玩2.2.2 eBean的@Transactional在抛出Exception时不回滚事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com