gpt4 book ai didi

事务服务中的 grails LazyInitializationException

转载 作者:行者123 更新时间:2023-12-02 00:26:59 27 4
gpt4 key购买 nike

我有一个问题。我在 grails 中有事务性服务:

class MyService {

static transactional = true

Set<Furniture> getFurniture(Long idHouse) {
return MyHouse.get(idHouse).getFurniture()
}
}

在我的 Controller 中,我有:def myService 并且我调用了 myService.getFurniture(id)

即使我的服务是事务性的,我也会得到:LazyInitializationException我正在使用 Grails 2.0.0.RC3谢谢。

最佳答案

当您在事务中时,整个时间都有一个打开的 session ,并且延迟加载的集合将能够在引用时解析。但是您只是返回未初始化的集合,一旦它返回到 Controller ,它就会与加载它的 Hibernate session 断开连接。

所以你只需要初始化集合,有几个选项。一种是调用 size() 方法:

Set<Furniture> getFurniture(Long idHouse) {
def furniture = MyHouse.get(idHouse).furniture
furniture.size() // force eager init
furniture
}

这将强制 Hibernate 进入数据库并填充集合。这依赖于副作用 - 最好的方法是调用 Hibernate.initialize():

import org.hibernate.Hibernate
...

Set<Furniture> getFurniture(Long idHouse) {
def furniture = MyHouse.get(idHouse).furniture
Hibernate.initialize furniture
furniture
}

关于事务服务中的 grails LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8489479/

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