我有一个执行以下步骤的应用程序:
在 session 中放置对象:
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
有没有办法阻止这种情况的发生,以便我可以重新附加对象并保存它,从而持久保存对产品 yield 集合的更改?
最佳答案
不要将对象存储在 session 中,而是存储 id,然后重新加载它。无论如何,attach
都会产生该成本,因此您没有节省任何东西,并导致此问题,再加上浪费服务器内存,这将影响可伸缩性。
关于session - org.hibernate.HibernateException 消息重新关联的对象有脏集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28216146/