grails 线程 -> hibernateException:没有 Hibernate 会话绑定到线程

2023-12-02

我试图在服务中创建一些线程,但我得到了 hibernateException: no session... 。我已经在 stackoverflow 中看到过关于此问题的讨论,其中包含抛出 RuntimeException 的解决方案。就我而言是行不通的。 这是我的服务代码:

class MatchService {

    static transactional = true

 def void start(Match match) {

  Thread.start {
   Match updateMatch = matchSituation(match)
   if(!updateMatch.save()) {
    throw new RuntimeException("match is not valid and cannot be saved!")
   }
  }
 }

 def Match matchSituation(Match m) {
  Random random = new Random()
  if(m.teamH.averagePlayerValue > m.teamA.averagePlayerValue) {
   m.golTeamH = random.nextInt(5)
  }
  else {
   m.golTeamA = random.nextInt(4)
  }
  return m
 }
}

工作类别:

 class TestJob {

     def matchService
     List<Match> matchList = new ArrayList()

     static triggers = {
      cron name: 'trigger',  cronExpression: "0 0/1 15 ? * WED"
      }

     def group = "threadGroup"


        def execute() {
      Cal.get(1).matches.each{
       match ->
        matchList.add(match)
      }

      for(Match m: matchList) {
       if(!m.validate()) {
        throw new MatchException( message: "match not valid!!" , match:m)
       }
       matchService.start(m)

      }
        }
    }

EDIT

使用backgroundThread插件(应该处理hibernate sessione):

    backgroundService.execute("Calculating match", {
        def backgroundMatch = match
        backgroundMatch = matchSituation(backgroundMatch)
        if(!backgroundMatch.save()) {
            throw new RuntimeException("match is not valid and cannot be saved!")
        }
    })

我收到这个错误错误 events.PatchedDefaultFlushEventListener - 无法将数据库状态与会话同步


我们使用的是quartz 插件,效果很好。

我之前在不同的情况下遇到过同样的问题,解决方法是将域访问代码包装在

DomainClass.withTransaction {
}

例如:

def execute() {
  Cal.withTransaction {
    Cal.get(1).matches.each{
        match ->
        matchList.add(match)
    }

    for(Match m: matchList) {
        if(!m.validate()) {
            throw new MatchException( message: "match not valid!!" , match:m)
        }
        matchService.start(m)

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

grails 线程 -> hibernateException:没有 Hibernate 会话绑定到线程 的相关文章

随机推荐

  • Jstree:dblclick 绑定参数数据未定义

    我尝试使用好的库jstree但我有一些奇怪的问题dblclick捆绑 这是我的代码 basic html jstree themes url http mywork shinframework shinfw themes redmond c
  • 嵌套 INotifyPropertyChanged 类不起作用

    得到了一些代码 得到了意想不到的结果 如果我用 Myclass 替换嵌套类 那就没有问题了 我想念什么 我是否绑定文本 到其他控件 或绑定图像并不重要 xaml代码
  • Android:是否可以在屏幕上同时创建底部和顶部选项卡?

    我想知道是否可以在顶部和底部设置不同的选项卡 单击时会导致不同的活动 谷歌搜索但没有找到任何相关内容 Thanks Android 的好处是几乎所有你想做的事情都可以实现 如果我们要更改您的 XML 我们会将其更改为以下内容
  • 用于淡入和淡出视图的 Angular 4 动画

    我只是希望视图在路线更改时淡入和淡出 我似乎已经正确设置了组件 但我认为需要使动画语法正确 这是我目前的动画尝试 我将此动画导入到我的组件中 import trigger state animate style transition fro
  • 使用 PHP API 进行 FB.login

    我已经设置了一个 Canvas 页面 单击表单提交按钮即可实现 FB login 在以下请求期间 它尝试通过 facebook gt api me 来自 Github 的最新 API 版本 访问用户数据 它可以在 Firefox 和 Chr
  • 检测序列参数的正确方法?

    我想编写一个接受参数的函数 该参数可以是序列或单个值 value的类型有str int等 但是我don t希望将其限制为硬编码列表 换句话说 我想知道参数 X 是一个序列还是我必须转换为序列以避免以后出现特殊情况的东西 我可以 type X
  • 错误:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“int”[-Wformat=]

    我目前正在尝试做自己的 shell 它必须是多语言的 所以我尝试实现一个读取 txt 文件中的行的函数 include
  • 如何在反应材料表上添加精美的滚动条?

    我在用着反应材料表并想要一个像样的滚动条而不是默认的分页 我努力了反应自定义滚动但它没有按照我的意图工作 我的应用程序的默认滚动条已激活 还有一件事 我怎样才能将这种类型的滚动应用到桌体上 import CustomScroll from
  • Fragment 和 Anko toast 的“接收器类型不匹配”

    我正在尝试使用 Jetbrains 的 Anko 库在我的应用程序中轻松显示 Android toast 消息 这是相关的代码片段 val message CharSequence Recycled holder taskEditText
  • 从 IntentService 向 Activity 发送消息

    我在同一个应用程序中有一个活动和一个intentService 该服务必须在活动结束后继续运行 因此我不想绑定 我已经在谷歌上搜索了几个小时 但找不到一个关于如何做到这一点的好例子 我可以启动该服务并向其传递额外内容 但现在该服务必须使用
  • iPad 上的 iAd:横向 iAd 方向不正确

    这仍然是一个相对较新的主题 因此不确定有多少人必须在 iPad iOS4 2 1 上实现 iAd 但基本上 我让 iAd 横幅以横向模式显示 并且显示正确 唯一的问题是 当我单击 测试广告 时 它会以纵向模式显示测试广告 即 设备仍处于横向
  • 有没有办法使用 Video.js 从视频标签获取当前字幕的文本?

    我想在播放视频期间获取当前字幕的文本 并且实现自己的字幕块 即隐藏原始字幕 并以几种不同的方式使用该信息 目前我使用videojs为我的球员 有什么方法可以从中获取当前标题的字符串吗 此代码获取当前提示并放入 span element fu
  • R curl::has_internet() FALSE 即使有互联网连接

    使用 R 包 Eurostat 从 EuroSTAT 下载数据时出现了问题 Population data by NUTS3 pop data lt subset eurostat get eurostat demo r pjangrp3
  • 为什么Android C2DM推送消息总是不到达?

    我已经构建了一个功能正常的 C2DM 应用程序 通常它运行得很好 并且推送消息到达得很快 然而 我发现当我第一次启动应用程序或将其重新聚焦时 消息经常不会到达 它们肯定发送成功 我收到 200 响应 并且消息格式肯定是正确的 稍后发送相同的
  • C 中的 size_t 是什么?

    我很困惑size t在 C 中 我知道它是由sizeof操作员 但它到底是什么 它是一种数据类型吗 假设我有一个for loop for i 0 i lt some size i 我应该使用int i or size t i 来自维基百科
  • 如何让自动对焦在第二个 AVCaptureSession 中工作而不重新创建会话?

    当我创建第二个 AVCaptureSession 时 自动对焦不适用于第一个 AVCaptureSession 要创建的第二个会话是自动对焦工作的会话 而第一个创建的会话则不自动对焦 我希望任一会话在另一个会话停止后启动时都能够自动对焦 就
  • 如何比较两个捕获的声音,看看哪一个声音更大?

    给定从麦克风捕获的两个字节数组的数据 我如何确定哪一个有更多的噪声尖峰 我假设有一种算法可以应用于数据 但我不知道从哪里开始 说实话 我需要能够确定婴儿何时哭泣以及房间内的环境噪音 如果有帮助 我正在使用 Microsoft Xna Fra
  • 无法实例化子目录中定义的类

    我的 简化的 项目布局如下 init py test py lib init py lib client py my test py简单来说就是 import lib client A client A Test and my lib cl
  • UIWindow 的根视图控制器在应用程序启动时不会旋转到横向

    我正在开发一个基于 xib 的仅横向应用程序 该应用程序可以在横向模式下正确启动 然而 我的主 ViewController 中的视图是纵向呈现的 也就是说 它旋转 90 度 使图像看起来被裁剪并且不会占据整个屏幕 如果我使用我的界面来呈现
  • grails 线程 -> hibernateException:没有 Hibernate 会话绑定到线程

    我试图在服务中创建一些线程 但我得到了 hibernateException no session 我已经在 stackoverflow 中看到过关于此问题的讨论 其中包含抛出 RuntimeException 的解决方案 就我而言是行不通