Одним из простых способов является загрузка stringSet
перед вызовом удаления. Тем не менее, здесь явно происходят странные ситуации, и я опишу то, что нашел до сих пор.
Простой ответ
def delete() {
DeleteTest test = DeleteTest.findByProp1('Test')
test.stringSet?.size() // <-- force load here
DeleteTest.withTransaction {
test.delete()
}
render(test as JSON)
}
Другое Соображения
Я попытался сделать stringSet
загруженным. Это не сработало, как ожидалось, и в коде beforeDelete
это часто было бы одно значение или пробел.
Я также попытался сделать StringSet множеством, в котором я определил один объект GORM MyString, содержащий значение. Это сработало (хотя я должен был сделать это с нетерпением), но я не считал это правильным решением для вашего случая, поскольку я предполагаю, что у вас уже есть данные, и я не могу их просто заменить.
На основе при некотором отладочном копании я предполагаю (но на самом деле это всего лишь предположение), что коллекция удаляется до того, как сработает событие beforeDelete
, и поэтому она не может быть лениво загружена в этот момент даже в новой транзакции. Я ожидаю, что кто-то еще сможет оценить, правильно это или нет, но опыт Grails 2 становится все труднее найти в наши дни.