我有一个域对象集合,我从数据库中检索到它。 之后我在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)
但我不喜欢它
答案 0 :(得分:1)
您可以使用GORM方法,但它是域类实例上的方法,而不是Hibernate会话:attach。那应该是
cars.each { it.attach }
或使用点差运算符:
cars*.attach()
但是,如果您无论如何都要从数据库重新加载所有内容,您应该考虑在HTTP会话中仅存储实例ID,而不是使用您丢弃和重建的大量对象来对其进行污染。像这样浪费服务器内存会对可伸缩性产生重大影响。
此外,如果这是一个用于调用会话方法的用例,那么你应该只进行一次 withSession
调用(并且它是静态的,所以在课堂上调用它):
Car.withSession { session ->
cars.each { car -> ... }
}