Эта статья гласит следующее:
Product.withTransaction{
product.status = "ACTIVE"
product.save(flush:true) //without this line the total number will be all of them but this one
Product.countByStatus("ACTIVE")
}
Неясной частью является следующий комментарий:
без этой строки общее число будет всех, кроме этой
и пояснение в статье сразу после кода выше:
В предыдущем коде без принудительной установки flush: true мы бы опускали продукт, который мы сохраняли в нашей транзакции.
Согласно моему пониманию, если мы вызываем product.save()
(без сброса), экземпляр product
должен быть присоединен к сеансу Hibernate, становясь объектом persistent
, который должен быть включен в число, возвращаемое Product.countByStatus("ACTIVE")
как транзакция та же, в которой мы сохранили продукт, а сеанс гибернации содержит информацию об этом сохраненном продукте, даже если инструкция не передана в базу данных.