Есть ли способ получить сгенерированные ключи при использовании Spring JDBC batchUpdate?

Я использую JDBC и хочу вставить пакет, но мне нужны сгенерированные ключи для следующего раунда вставок - все равно для этого?

MapSqlParameterSource[] batchArgs ....

DAL.getNamedParameterTemplate().batchUpdate("INSERT INTO...", batchArgs);

Спасибо

Ответ 1

Spring фреймворки попытались решить проблему. Но они отказались от попытки, когда стало очевидно, что нет никакого способа гарантировать, что решение будет работать со всеми драйверами JDBC. Это связано с тем, что спецификация JDBC не гарантирует, что сгенерированные ключи будут доступны после пакетного обновления. Драйверы JDBC могут использовать эту функцию по своему усмотрению. В некоторых случаях базовая база данных может не возвращать сгенерированные ключи, что делает невозможным поддержку драйвером этой функции.

Таким образом, даже если вы напрямую работаете с JDBC, вам нужно будет проверить, позволяет ли ваша база данных и драйвер JDBC создавать сгенерированные ключи.

Я помню, что смог добиться этого с помощью драйвера MySQL 5.0 JDBC с некоторыми усилиями, но никогда не интегрировал решение в наше производственное приложение, поскольку нам также приходилось поддерживать более старые версии MySQL.

Ответ 2

Используйте последовательности db, чтобы получить следующее значение первичного ключа и использовать его в инструкции insert.