Есть ли способ получить сгенерированные ключи при использовании Spring JDBC batchUpdate? - PullRequest
13 голосов
/ 11 марта 2010

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

MapSqlParameterSource[] batchArgs ....

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

Спасибо

Ответы [ 2 ]

9 голосов
/ 03 июля 2011

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

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

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

0 голосов
/ 11 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...