session - org.hibernate.HibernateException 消息重新关联的对象有脏集合

标签 session grails grails-orm

我有一个执行以下步骤的应用程序:

  1. 在 session 中放置对象:

    def product = Product.get(1)
    session["product"] = product
    
  2. 执行 Ajax 调用以更新 1-m 关系,然后呈现显示新优势的部分模板。这些不应该被保存,因为用户可能会改变主意,所以调用丢弃:

    def product = session["product"]
    
    if ( !product.isAttached() ) {
       product.attach()
    }
    
    product.addToBenefits( new Benefit( title: "xx" ) )
    
    product.discard()
    
    session["product"] = product
    
  3. 尝试在保存操作中保存对象。

    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/

相关文章:

mysql - 我可以使用 gorm 将 MySQL 中的现有字段增加 1 吗?不使用原始 SQL

mysql - GORM withCriteria 返回意外的重复结果

php - codeigniter session 和 cookie

java - Spring MVC - 检查 session 是否存在

java - Java 中一个 servlet 的多个 session

grails - 初始化类路径时出错 : No subject alternative DNS name matching services. 找到 gradle.org。 -> 运行 grails 3.0.1 应用程序时

testing - Grails 集成测试过滤器

javascript - 如何将JavaScript变量传递给g:remoteFunction的 “update”属性?

php - 什么时候是将 $_SESSION 数组中的大量值写入数据库中的记录的最佳时机?

mysql - 如何处理 Grails/GORM 中破裂的关系?