1
我在獲取事件處理程序方法中的會話時遇到問題。 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:無會話發現當前線程
誰能幫助我與我的問題?我究竟做錯了什麼?
是的,我知道。這段代碼只是我真正的項目代碼的一個必備部分。當然,該服務中有很多方法不應該包含在事務中,這就是爲什麼我使用'static transactional = false' –