gpt4 book ai didi

events - 处理事件时“未找到当前线程的 session ”

转载 作者:行者123 更新时间:2023-12-02 14:40:22 24 4
gpt4 key购买 nike

我在获取事件处理程序方法中的 session 时遇到问题。
Grails版本:3.0.11

因此,代码本身:

class FooController {

def notifyFoo(Long id) {
notify('Foo:foo', id)
sendSuccessMessage(message(code: 'Message.Text.Success'))
}
}

@Consumer
class BarService {

static transactional = false

@Selector('Foo:foo')
@Transactional
def onFoo(Long fooId) {
Baz baz = Baz.findByFooId(fooId)
baz.bazProp++
**baz.save()** /*Here i get the error about 'No session found'*/
}
}

我尝试了不同的方法来解决此问题:
  • 将所有业务逻辑移动到另一个标记为@Transactional的方法中,并从onFoo()方法
  • 显式调用它
  • 使用Baz.withTransaction {},Baz.withSession {},Baz.withNewSession {}将业务逻辑包装在onFoo()中,从而关闭

  • 无论如何,我都会遇到相同的错误: org.hibernate.HibernateException:当前 session 找不到 session

    谁能帮我解决我的问题?我究竟做错了什么?

    最佳答案

    您不应该在同一服务中合并static transactional = false@Transactional-使用其中一项:

  • 如果不是所有服务方法都不是事务处理,则使用static transactional = false
  • (如果所有服务方法都需要读/写事务),请使用static transactional = true
  • 如果(同一服务的)不同方法具有不同的事务语义,请使用批注

  • 在Grails 3.X中,不赞成使用静态注释,因此仅应使用注释。

    关于events - 处理事件时“未找到当前线程的 session ”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167773/

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