Пакетирование операций DML работает с сеансом без сохранения состояния, но оно имеет те же ограничения, что и пакетирование с сеансом с полным состоянием, и некоторые дополнительные:
- Он не может вставлять пакетные объекты, если эти объекты имеютвставлять полученные идентификаторы, например, генератор
identity
. - Он не может пакетно вставлять, обновлять или удалять объекты, охватывающие многие таблицы.
- Может не работать с оптимистической блокировкой.(Здесь могут быть разные случаи, в зависимости от того, как генерируется версия.)
- Кроме того, поскольку он не имеет состояния, он не будет пытаться перегруппировать операции одного класса сущностей, чтобы объединить их вместе.Как только вы начнете другую операцию (например, перейдете от вставки к обновлению) или начнете работать с сущностями другого типа, предыдущий пакет будет сброшен.Таким образом, при работе с сеансом без сохранения состояния пакетирование действительно не будет работать, если операции постоянно смешиваются.Разработчик должен перегруппировать их.
Как видно из вашего комментария к другому ответу, ваша сущность охватывает множество таблиц.Он не может быть пакетным.
Вот упрощенное и неполное объяснение того, как это работает.Дозатор DML работает с помощью команды вставки, обновления или удаления с параметрами для своих значений.Он хранит его вместе со значениями его параметров.При следующей полученной команде он проверяет, совпадает ли она с предыдущей.Если да, он сохраняет значения своих параметров.Если это другая команда, она сбрасывает предыдущий пакет и сохраняет новую команду.
Именно поэтому объект, охватывающий несколько таблиц, не может быть объединен: каждая операция над ним подразумевает множество команд, в результате чего дозатор сбрасывается в каждомоперация.В некоторых крайних случаях, когда вы вставляете базовую неабстрактную сущность, не охватывающую много таблиц, а затем дочернюю сущность, охватывающую много таблиц, вы можете наблюдать вставку базовой таблицы из первой дочерней сущности, которая будет объединена со вставкой базовой сущности.Но это угловой случай, который на самом деле не стоит пытаться использовать, поскольку он работает только для первой многосерийной сущности, следующей за базовой операцией, а не для следующих операций.