我有一个域对象集合,我从数据库中检索了这些对象。
之后,我将此集合保存在Http session 中:
def cars = Car.findAll()
session.cars = cars
如何将这些对象再次附加到休眠 session ?
我试过了
List<Car> cars = session.cars
cars.each {car ->
car.withSession {session ->
session.attach(car)
}
}
但是我只有:类
groovy.lang.MissingMethodException
信息
没有方法签名:com.sun.proxy。$ Proxy53.attach()适用
附言
我找到了一种解决方法:
Car.findAllByIdInList(cars*.id)
但是我不喜欢
最佳答案
您可以使用GORM方法,但这是域类实例上的方法,而不是Hibernate Session:attach。所以应该是
cars.each { it.attach }
或使用点差运算符:
cars*.attach()
但是,如果仍然要从数据库重新加载所有内容,则应考虑仅将实例ID存储在HTTP session 中,而不要用一堆丢弃并重建的大对象对其进行污染。这样浪费服务器内存将对可伸缩性产生重大影响。
同样,如果这曾经是调用 session 方法的用例,则只应执行一次
withSession
调用(它是静态的,因此请在类上调用它):Car.withSession { session ->
cars.each { car -> ... }
}
关于grails - ils。将域对象的集合从HttpSession重新附加到Hibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055174/