Бизнес-логика внутри процесса такова:
Я использую каскадное удаление всех-сирот и обратное значение = истина, оба в моем родительском классе. При удалении элемента из коллекции я устанавливаю .parentObj = null
и удаляю элемент из коллекции.
При использовании TemplateFlushMode.Auto
, я профилировал базу данных и сделал следующее:
(вставляемый элемент выполняется, потому что выполняется find ()
, чтобы гарантировать согласованность данных в базе данных). Выбор сделан, а затем я ожидал, что будет выполнено DELETE
... но выполнено обновление до parentID = null
.
При выполнении Session.Flush ()
прямо перед Find ()
происходит следующее:
При использовании TemplateFlushMode.Commit
изменения вносятся в конце транзакции, и элемент никогда не вставляется:
Приложение, с которым я работаю, использует TemplateFlushMode.Auto
, поэтому мне интересно, есть ли объяснение, почему каскадирование не работает, если выбор выполняется между добавлением и удалением одного элемента в той же транзакции?
I знайте, что первый ответ, который приходит на ум, - «не добавляйте элемент в коллекцию, если он будет удален впоследствии». Но я бы предпочел не менять бизнес-логику.
Кто-нибудь знает, почему выполняется обновление вместо удаления
при использовании АВТО
? (при использовании Commit
объект не вставляется)