org.hibernate.HibernateException 消息重新关联的对象有脏集合
org.hibernate.HibernateException Message reassociated object has dirty collection
我有一个执行以下步骤的应用程序:
在会话中放置对象:
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
有没有办法阻止这种情况的发生,以便我可以重新附加对象并保存它,从而使对产品收益集合的更改持久化?
不要将对象存储在会话中,存储 ID,然后重新加载它。 attach
无论如何都会产生该成本,因此您没有节省任何东西,并导致此问题,加上浪费服务器内存,这将影响可伸缩性。
我有一个执行以下步骤的应用程序:
在会话中放置对象:
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
有没有办法阻止这种情况的发生,以便我可以重新附加对象并保存它,从而使对产品收益集合的更改持久化?
不要将对象存储在会话中,存储 ID,然后重新加载它。 attach
无论如何都会产生该成本,因此您没有节省任何东西,并导致此问题,加上浪费服务器内存,这将影响可伸缩性。