0

在过去使用以前版本的 Grails/Hibernate 的项目中,我在服务功能中使用过:

private void cleanGorm() {
    def session = sessionFactory.currentSession
    session.flush()
    session.clear()
}

例如,在批量更新等长时间任务中,我使用了它,例如:

    bigListToIterate.each {

        if (it.id > 0 && it.id % 50 == 0) {
            cleanGorm()
        }
        //CRUD action
    }

但是,这不适用于 Grails 4.0.1;虽然没有抛出异常,但更改仍然没有反映在数据库中。

我怎样才能完成它?

我在用着:

compile "org.grails.plugins:hibernate5"
compile "org.hibernate:hibernate-core:5.4.0.Final"

mysql版本:

SELECT version();
'5.7.21'

如果我检查数据库,我可以看到表中的行数正在增加并且表的数据长度正在增加,但是当我运行 MySQL 查询时,select * from table直到整个函数结束,我才能得到任何结果。

在此处输入图像描述

4

1 回答 1

0

如果您需要对域对象进行某种批处理,标准方法是.save( flush:true )每次调用n

bigListToIterate.eachWithIndex { something, index ->
    Book b = new Book(...)
    //CRUD action
    b.save flush:index > 0 && index % 50 == 0
}

那将为您刷新会话。

于 2020-01-19T22:52:53.483 回答