Почему пакетной обработке JDBC нужен сгенерированный идентификатор при вставке или других DML? - PullRequest
0 голосов
/ 22 января 2019

Это ссылка на этот пост .

Влад указывает на

Единственный недостаток (с ИДЕНТИЧНОСТЬЮ) в том, что мы не можем знатьвновь присвоенное значение до выполнения оператора INSERT.Это ограничение препятствует стратегии очистки «транзакционной записи за», принятой в Hibernate.По этой причине Hibernates отключает пакетную поддержку JDBC для сущностей, использующих генератор IDENTITY.

Более того, в своей книге Влад упоминает -

В соответствии со спецификацией JDBC 4.2 каждый драйвер должен реализовывать метод supportsGetGeneratedKeys () и указывать, поддерживает ли он автоматический поиск ключей.К сожалению, это относится только к обновлениям одного оператора, поскольку спецификация не обязывает драйверы поддерживать извлечение сгенерированного ключа для пакетных операторов.При этом не все системы баз данных поддерживают извлечение автоматически сгенерированных ключей из пакета операторов.

Даже если драйвер базы данных не поддерживает поиск ключа для операторов пакета, во-первых, почемусуществует необходимость в поиске идентификатора.

Вновь присвоенное значение неизвестно до выполнения оператора INSERT.Как это влияет на «транзакционную запись позади» и какова причина того, почему пакетная обработка не будет работать без назначенного значения.Пожалуйста, предложите.

Или, если выразить это по-другому, - почему сгенерированный Id необходим для пакетного выполнения?

...