Грипп sh сеанс в Grails 4.0.1 - PullRequest
0 голосов
/ 20 января 2020

В прошлых проектах, в которых использовались предыдущие версии Grails / Hibernate, я использовал в сервисах funciton:

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 query select * from table Я не могу получить никаких результатов, пока не закончится вся функция.

enter image description here

1 Ответ

0 голосов
/ 20 января 2020

Если вам нужно выполнить какую-то пакетную обработку с вашим доменным объектом, стандартным способом будет вызывать .save( flush:true ) каждый n раз:

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

Это будет гриппом sh сессия для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...