grails - ils。将域对象的集合从HttpSession重新附加到Hibernate session

标签 grails gorm

我有一个域对象集合,我从数据库中检索了这些对象。
之后,我将此集合保存在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/

相关文章:

grails - 映射表中允许与多余列进行多对多关系的重复项

postgresql - 生成重复的唯一约束名称

grails - 如何在 grails 中从我的类路径中获取 4.0 版的 httpclient

hibernate - Grails域映射异常

grails - Grails 上的策略模式

mysql - Grails 不会生成多对多中的所有 SQL 表

grails - 与具有String id列的域的多对多关系

hibernate - hibernate 过滤器不适用于父域

mongodb - GORM UpdateAll引用属性

grails - Grails 2.4.4动态一对多表单