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

2024-01-03

似乎在将 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 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:无法使用ebean orm回滚事务 https://stackoverflow.com/questions/17076055/play-2-1-1-unable-to-rollback-transaction-with-ebean-orm,但没有找到在 Action 中使用 @Transactional 的问题的明确解决方案。


我遇到了类似的问题,但我只用 play 版本 2.3.7 进行了测试:

我注意到有两个不同的库包含事务注释:@com.avaje.ebean.annotation.Transactional and @play.db.ebean.Transactional.

显然,它们中的每一个都只适用于某种类型的类,并且当使用错误时,不会执行回滚。这是我通过测试发现的:

  • @com.avaje.ebean.annotation.Transactional: 仅适用于代表模型的类中的方法,即它们具有@javax.persistence.Entity注解。然而,ebean 增强中似乎存在一个错误,这会导致类尽管没有进行任何更改,但总是重新编译 https://stackoverflow.com/questions/27986780/play-2-3-7-sbt-multiproject-compiler-issue/28148371#28148371
  • ebean 的文档 http://www.avaje.org/ebean/introtrans_begin.html给出了另外两种实现交易的方式,例如您可以使用 try/finally 块。在我的测试中,这种方式一直运行良好,并且执行了回滚。
  • @play.db.ebean.Transactional:仅适用于操作,即该类派生自play.mvc.Controller。我不确定这种行为是否是有意为之,但游戏框架的文档 https://www.playframework.com/documentation/2.3.x/JavaEbean只谈交易actions并且根本没有提到模型类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.2.2 eBean的@Transactional在抛出Exception时不回滚事务 的相关文章

  • 将 IndexToString 应用于 Spark 中的特征向量

    Context 我有一个数据框 其中所有分类值都已使用 StringIndexer 进行索引 val categoricalColumns df schema collect case StructField name StringType
  • 应对失败的“未来”

    给出以下两种方法 def f Future Int Future 10 def g Future Int Future 5 我想把它们写成 scala gt import scala concurrent Future import sca
  • 如何通过 javascript 和 ajax 调用 Scala 中的方法?

    我不知道我的标题是否有点误导 但这是我真正需要帮助的 我正在获取这个网址 get fb login fbEmail function data console log data 这是我的路线 GET fb login email prese
  • 为什么自类型类可以声明类

    我知道 Scala 只能混合特征 这对于依赖注入和蛋糕模式是有意义的 我的问题是为什么我仍然可以声明一个需要另一个 类 但不需要特征的类 Code class C class D self C gt 这仍然编译成功 我认为它应该编译失败 因
  • 获取SettingKey[T]的值

    我正在开发一个用于文档生成的插件 我想将所有生成的文件输出到我选择的目录中 该目录可以是SBT的子目录target目录 如下 val newTargetDirectory SettingKey File document target di
  • Typesafe 存储库和激活器出现问题

    在尝试创建新的 Play Framework 2 3 应用程序时 我收到了未解决的依赖项的错误 我检查了存储库 但无法手动找到依赖项 error update sbt ResolveException unresolved dependen
  • Kafka 分区键无法正常工作

    我正在努力解决如何正确使用分区键机制的问题 我的逻辑是设置分区号为3 然后创建三个分区键为 0 1 2 然后使用分区键创建三个KeyedMessage 例如 KeyedMessage 主题 0 消息 KeyedMessage 主题 1 消息
  • Java 拥有闭包后 Scala 的优势 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着 Java 中添加了闭包 作为语言选择 Scala 相对于 Java 的优势是什么 有人可以详细说明一下有什么优点吗 除了闭包 J
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean
  • Scala:类型参数中的问号

    我试图理解以下代码 来自 Scalaz 库 def kleisliIdApplicative R Applicative Kleisli Id R 我假设一种形式T P0 是一个带有参数的类型构造函数 但是我无法找到解释类型参数中问号用法的
  • 如何在 Lift 框架中添加新页面

    如何在 lift 中的 webapp 目录中添加一个可供用户访问的新页面 目前只能通过index html访问http localhost 8080 com http localhost 8080 or http localhost 808
  • 使用 scalapb 在 Spark Streaming 中解码 Proto Buf 消息时出错

    这是一个 Spark Streaming 应用程序 它使用编码的 Kafka 消息Proto Buf Using scalapb图书馆 我收到以下错误 请帮忙 gt com google protobuf InvalidProtocolBu
  • 如何调用 Scala 抽象类型的构造函数?

    我试图弄清楚如何调用 Scala 抽象类型的构造函数 class Journey val length Int class PlaneJourney length Int extends Journey length class BoatJ
  • 在 scala 宏中使用 LabelDef (2.10)

    我正在尝试 scala 2 10 宏功能 我使用时遇到问题LabelDef但在某些情况下 在某种程度上 我偷看了编译器的代码 阅读了摘录米格尔 加西亚的论文 http lampwww epfl ch magarcia但我还是卡住了 如果我的
  • 如何使用 Scala 从 Spark 更新 ORC Hive 表

    我想更新 orc 格式的 hive 表 我可以从 ambari hive 视图进行更新 但无法从 sacla spark shell 运行相同的更新语句 objHiveContext sql select from table name 能
  • 如何将 Dataframe 列名称与 Scala 案例类属性相匹配?

    本示例中的 Spark sql 列名来自case class Person case class Person name String age Int val people RDD Person An RDD of case class o
  • 将下划线分配给变量。下划线是做什么的?

    最近我遇到了这样的代码 var myVariable variableKind 这似乎是一种分配方式null to myVariable 谁能解释一下背后的理由 在这种情况下 分配之间有什么区别 and null到一个变量 它使用默认值初始
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • @tailrec为什么这个方法不编译为“包含不在尾部位置的递归调用”?

    tailrec private def loop V key String V key match case gt loop key 此方法无法编译并抱怨它 包含不在尾部位置的递归调用 有人可以向我解释一下发生了什么事吗 这个错误消息对我来
  • 你能在 scala 中使用 varargs 柯里化一个函数吗?

    我正在考虑如何用可变参数柯里化一种方法 然后我意识到我什至不知道如何去做 理想情况下 它应该让您可以随时开始使用它 然后以可迭代结束 def concat strs String strs mkString val curriedConca

随机推荐