2

在 grails 域中实现了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自动刷机吗?

4

2 回答 2

4

文档(向下滚动到此处beforeDelete的示例)似乎暗示不需要刷新或清除会话。

Burt Beckwith还在 Grails 邮件列表(请参阅此处的线程)上指出手动调用flush()并且在闭包clear()中不是必需的。withNewSession

话虽如此,从 Grails 2.2.1 开始似乎确实有一个错误报告(请参阅此处的详细信息) 。withNewSession

于 2013-12-13T04:08:54.170 回答
0

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

于 2012-10-05T18:28:28.140 回答