我有一个执行以下步骤的应用程序:
在会话中放置对象:
def product = Product.get(1)
session["product"] = product
执行和Ajax调用以更新1-m关系,然后呈现显示新优势的部分模板。这些不应该保存,因为用户可能会改变主意,因此称为丢弃:
def product = session["product"]
if ( !product.isAttached() ) {
product.attach()
}
product.addToBenefits( new Benefit( title: "xx" ) )
product.discard()
session["product"] = product
尝试在保存操作中保存对象。
def product = session["product"]
if ( !product.isAttached() ) {
product.attach()
}
product.save()
此时我们得到以下异常:
org.springframework.orm.hibernate3.HibernateSystemException: reassociated object has dirty collection; nested exception is org.hibernate.HibernateException: reassociated object has dirty collection
无论如何都要阻止这种情况发生,以便我可以重新附加对象并保存它,从而持续更改产品权益集合?
答案 0 :(得分:1)
不要将对象存储在会话中,存储id,然后重新加载它。您使用attach
无论如何都会产生这笔费用,因此您不会保存任何内容,并导致此问题,加上浪费服务器内存,这会影响可扩展性。