Grails的。重新附加从HttpSession到Hibernate会话的域对象集合

时间:2015-03-14 22:51:09

标签: grails gorm

我有一个域对象集合,我从数据库中检索到它。 之后我在Http会话中保存了这个集合:

def cars = Car.findAll() 
session.cars = cars

如何将这些对象再次附加到hibernate会话? 我试过了

List<Car> cars = session.cars
cars.each {car ->
  car.withSession {session ->
    session.attach(car)
  }
}

但我只得到:上课 groovy.lang.MissingMethodException 信息 没有方法签名:com.sun.proxy。$ Proxy53.attach()适用

P.S。 我找到了一个解决方法:

Car.findAllByIdInList(cars*.id)

但我不喜欢它

1 个答案:

答案 0 :(得分:1)

您可以使用GORM方法,但它是域类实例上的方法,而不是Hibernate会话:attach。那应该是

cars.each { it.attach }

或使用点差运算符:

cars*.attach()

但是,如果您无论如何都要从数据库重新加载所有内容,您应该考虑在HTTP会话中仅存储实例ID,而不是使用您丢弃和重建的大量对象来对其进行污染。像这样浪费服务器内存会对可伸缩性产生重大影响。

此外,如果这是一个用于调用会话方法的用例,那么你应该只进行一次 withSession调用(并且它是静态的,所以在课堂上调用它):

Car.withSession { session ->
    cars.each { car -> ... }
}