带有NewSession的Grails不会刷新

时间:2012-10-05 16:47:28

标签: hibernate grails gorm hibernate-session

在grails域中,a已实现beforeDelete,如下所示

class Shop {
    def beforeDelete() {
        Shop.withNewSession {
            Client.findAllByShop(this)*.shop = null                 
        }    
    }
}

但客户端商店空值不会持久保存到数据库中。

如果我添加手动会话刷新

class Shop {
    def beforeDelete() {
        Shop.withNewSession { s2->
            Client.findAllByShop(this)*.shop = null         
            s2.flush()  
            s2.clear()
        }
    }
}

可行,客户端商店值在数据库中为空。

这是Grails错误还是我误解了文档? withNewSession是否意味着自动冲洗?

2 个答案:

答案 0 :(得分:3)

文档(向下滚动到beforeDelete示例here)似乎意味着不需要刷新或清除会话。

Burt Beckwith也在Grails邮件列表上显示(请参阅主题here),flush()中不需要手动调用clear()withNewSession闭合。

据说,从Grails 2.2.1开始,使用withNewSession似乎确实存在错误报告(请参阅详细信息here

答案 1 :(得分:0)

withNewSession为您提供了一个新的Hibernate会话,但它不一定是事务性的。听起来您想使用withTransaction代替withNewSession