如何处理GORM异常

2024-06-24

我正在尝试对 Hibernate 引发的乐观锁类​​型异常实现异常处理,但我遇到了一个奇怪的问题。看来我无法捕获任何 Gorm 异常。

例如,我的服务中有以下代码:

try {
  User user = User.get(1);
  Thread.sleep(10000);
  user.viewedAt(new Date());
  user.save(flush:true);
} catch (OptimisticLockingException ex) {
  log.error("Optimistic lock exception");
} catch (StaleObjectStateException ex) {
  log.error("Optimistic lock exception");
}

当我用两个线程命中此块时,它会爆炸并且异常会传播到 Grails 的标准异常处理程序。即使报告的异常是,catch 块也永远不会被调用StaleObjectStateException.

我注意到我can如果我让它传播到控制器并在那里捕获它,则捕获异常,但似乎我无法在服务中实现异常处理,这很奇怪。

我缺少什么?


我已经了解了这一点,并将其发布,以防其他人遇到此问题。出现此问题的原因是 try/catch 块位于事务服务中。尽管grails报告在执行期间抛出了异常save()调用,实际上它被称为AFTER提交事务时的整个方法。

所以看来:

  1. flush: true对交易服务没有影响
  2. 在事务服务中捕获 GORM 相关的异常是不可能的,至少在不做一些工作的情况下是不可能的

我最终通过自己手动管理交易来解决这个问题,即

try {
  User.withNewTransaction {
    User user = User.get(id); // Must reload object
    .. // do stuff
    user.save(flush:true)
  }
} catch (OptimisticLockingException ex) {
  ...
}

我希望这对其他人有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理GORM异常 的相关文章

  • 函数不会抛出 bad_alloc 异常

    我正在尝试根据 Stroustrup 的 C PL4 书做一个练习 任务是 使用分配这么多内存new that bad alloc被抛出 报告如何 分配了多少内存以及花费了多少时间 执行此操作两次 一次不写入分配的内存 一次写入每个 元素
  • 有没有比 ` except: pass` 更简洁的替代方案?

    我有一个函数 可以按偏好顺序返回多个组的随机成员 事情是这样的 def get random foo or bar I d rather have a foo than a bar if there are foos return get
  • ASP.NET Webform 中的异常处理

    在 ASP NET Webforms 中处理异常的首选方法是什么 你有Page Error您添加的方法 我认为 web config级别 并且当发生错误时整个站点将被重定向到该级别 这是否意味着您不应在 Web 表单应用程序中的任何位置使用
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 为什么 Perl 6 的 try 不处理 shell() 中的非零退出?

    This try https docs raku org language exceptions index entry try blocks try捕获异常 try die X AdHoc say Got to the end 输出显示程
  • 如何让 CSS 字体与这个 Grails PDF 渲染插件一起使用?

    我正在使用 Grails 渲染插件来生成 PDF 我想在我的 PDF 中包含 CSS 以便更好地呈现它 我在上找到了一个例子渲染插件网站 http gpc github io grails rendering docs manual gui
  • 如何加密/解密 Grails 域类中的列?

    因为我想介绍一些数据安全性 所以我想知道是否可以加密 解密 Grails 域类中的特定列 如果可以 最简单的方法是什么来实现这样的事情 假设我有一个 User 类 想要加密 ssn 号或银行帐号 这样它们就不会以纯文本形式存储在数据库中 最
  • Symfony2 - 操纵来自内核异常侦听器的请求/响应

    我正在为网站构建一个管理面板 我想更改发生 404 异常时调用的视图but only对于管理应用程序 path admin 我已经做过头了error404 html twig查看 在app Resources TwigBundle view
  • 为 WebApplicationException 配置自定义映射器的正确方法是什么?

    我已经创建了实现的类implements ExceptionMapper
  • 如何在 Python 中打印异常?

    如何打印错误 异常except block try except print exception 对于 Python 2 6 及更高版本和 Python 3 x except Exception as e print e 对于 Python
  • 最常见的已检查和未检查 Java 异常? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 据我了解 如果不逐一查找 API 文档 就无法找出方法抛出了哪些异常 由于这是不可能的 我想反向研究并询问您在处理时遇到的最常见的异常
  • 此时无法启动异步操作调用WebService出现异常?

    在我的 ASP NET MVC 3 项目中 我调用 Web 服务进行登录身份验证 但它抛出一个异常 异常详细信息 此时无法启动异步操作 异步操作只能在异步处理程序或模块内启动 或者在页面生命周期中的某些事件期间启动 如果在执行页面时发生此异
  • C++ 析构函数中的异常

    从其他线程 我知道我们不应该在析构函数中抛出异常 但对于下面的例子来说 它确实有效 这是否意味着我们只能在一个实例的析构函数中抛出异常 我们应该如何理解这个代码示例 include
  • 如何处理 ASP.NET 中未处理的线程异常?

    ASP NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常 由于错误 默认情况下 此类异常会导致进程终止 这在 ASP NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止 这也是一个性能问题 请求线程上的异常
  • 超出 WCF 最大并发会话数

    我的公司申请遇到了问题 我将总结系统的关键要素 我公司的系统几年来一直在 Windows XP 和 7 Home Pro Basic 机器上运行 它是用 NET 4 0 编写的 基于 WCF 它使用默认的限制值 MaxConcurrentS
  • url 映射中的语言前缀不适用于所有情况

    我在语言映射方面遇到问题 我希望它的工作方式是在 URL 中编码语言 如 appname de mycontroller whatever 如果您转到 appname mycontroller action 它应该检查您的会话 如果没有会话
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti

随机推荐

  • MVC 5:模型中的字典绑定到视图中的一系列复选框?

    当我将模型发布到控制器以保存它时 控制器会得到一个空字典 哪里出了问题 绑定工作有什么特别要做的吗 我的模型有这个属性 public Dictionary
  • 如何查询 JSON 元素

    假设我有一个 Postgres 数据库 9 3 并且有一个名为Resources 在里面Resources表我有字段id这是一个 int 和data这是一个 JSON 类型 假设我在该表中有以下记录 1 firstname Dave las
  • Google TreeMap 填充值设置为 _ABSTRACT_RENDERER_ID_1

    我正在使用谷歌树图来呈现一些数据 我的 showScale 组件有问题 当树形图渲染时 showScale 组件应显示 minColor 和 maxColor 之间的 e 渐变 此时它是完全黑色的 The fillsvg组件的属性设置如下
  • java中的一个方法是否可以返回两个ArrayList值?

    有没有办法从一个方法返回两个值 Example public Class Sample public List
  • 将插件间谍插件安装到自定义 rcp 应用程序中

    插件间谍从 3 4 开始就包含在 Eclipse 中 我想知道是否有单独的插件分发 因此它可以用于安装到自定义 rcp 应用程序中 就我而言 如果需要此信息 那就是 jubula 使用插件注册表视图 您可以看到间谍定义在org eclips
  • IE8 上的 FormData ajax 上传 -> 替代方案及其工作原理

    我想用ajax上传图片 所以我使用FormData 但它不适用于IE8 我查了一下 发现不能在 IE8 中使用 FormData 但我没有发现可以使用任何东西来使其在 IE8 和其他浏览器上工作 有人可以告诉我该怎么做以及如何做吗 我尝试提
  • 获取用户IP地址的明确方法php [重复]

    这个问题在这里已经有答案了 可能的重复 获取用户ip地址的函数 https stackoverflow com questions 6717926 function to get user ip address 我被告知这种获取 IP 地址
  • 如何在视图中包含js文件。 ASP.NET MVC 4

    我想知道为什么我的 js 文件在视图中调用时可以工作 section Scripts 但当我调用它时不起作用 section Scripts 这是因为 js文件无法访问 Views 文件夹 你必须启用它 http blog falaf
  • SQL LIKE 运算符在应该显示任何结果时没有显示任何结果

    我有一个包含大量信息的车辆表 但其中一列是 MSSQL 表中的 所有者 但我使用时无法选择其中一个所有者LIKE但如果我可以使用 Silkeborg Distributionscenter 是所有者 是的 表和参数中都有一个双空格 所以参数
  • Android:媒体播放器因未处理的事件而消失

    我需要获取需要从应用程序播放的一系列语音公告的音频文件的持续时间 我已将音频文件添加为资源 它们确实播放得很好 下面的示例代码实际上非常适合其预期目的 它确实返回音频文件的持续时间 这是代码 float getDurationOfAudio
  • 当标题是ggplot2中的变量时,如何更改绘图标题的字体大小?

    我正在使用 ggplot2 生成散点图 我将标题设为变量 如何更改字体大小 代码如下 library ggplot2 plotfunc lt function x x geom point geom smooth se FALSE meth
  • 将 DataTable 的单列转换为 CSV

    使用 VB NET 将 DataTable 的单列转换为 CSV 的最简洁方法是什么 这些值是整数 所以我不需要担心字符转义或编码 转换为 CSV 是什么意思 如果你想生成一个以逗号分隔值的字符串 你可以使用 this tbl是你的数据表和
  • 在 jsx 中使用地图内的地图

    normalizedData map obj gt div div obj display date numberic div div isEmpty obj applicants obj map obj2 gt div obj2 pers
  • Wix 为所有用户/每台机器创建非广告快捷方式

    在 WIX 中 如何在所有用户配置文件中创建非广告快捷方式 到目前为止 我只能通过广告中的快捷方式来完成此任务 我更喜欢非广告的快捷方式 因为您可以转到快捷方式的属性并使用 查找目标 在教程中 我看到使用注册表值作为快捷方式的键路径 问题是
  • Java:以 JSON 响应的简单 HTTP 服务器应用程序

    我想用 Java 创建一个非常简单的 HTTP 服务器应用程序 例如 如果我运行服务器本地主机在港口8080 并且我从浏览器进行以下调用 我想获得一个带有字符串 hello world 的 Json 数组 http localhost 80
  • 是否可以从 URL 中包含 Vue.js 组件?

    我们正在设计一个插件架构 并且很好奇是否有一种方法允许通过 URL 将第 3 方插件包含为 Vue 组件 如何从远程 url 导入 vue 文件 例如 我尝试遵循 Alex Jover Morales 的方法来导入异步组件异步 vue js
  • Langchain的AzureOpenAI错误:找不到资源

    我尝试使用 LangChain 的 AzureOpenAI 如下所示 但出现此错误 你知道我该如何解决这个问题吗 openai error InvalidRequestError Resource not found Import Azur
  • VS Code / Bitbucket / SSH - 权限被拒绝(公钥)

    我试图通过 ssh 从 vscode 访问 bitbucket 但总是得到权限被拒绝 公钥 SSH 密钥位于 ssh 公钥已正确设置在bitbucket settings security sshkeys 按键已经过测试并且可以工作 启动后
  • Razor 页面 - CSS 隔离 - 某些 HTML 标签的样式不起作用

    我正在尝试使用 Razor Pages CSS 隔离在 ASP NET Web 应用程序中设置正文 标题和表单标签的样式 在作用域 CSS 文件 Layout cshtml css 中为某些 HTML 标记创建的样式不起作用 其他组件文件也
  • 如何处理GORM异常

    我正在尝试对 Hibernate 引发的乐观锁类 型异常实现异常处理 但我遇到了一个奇怪的问题 看来我无法捕获任何 Gorm 异常 例如 我的服务中有以下代码 try User user User get 1 Thread sleep 10