Обновление Spring Boot JdbcTemplate с KeyHolder не возвращает ключ для UUID в MySQL - PullRequest
0 голосов
/ 24 января 2020

Я перевожу базу данных PostgreSQL на MySQL и наткнулся на проблему с идентификаторами таблицы UUID.

PostgreSQL

CREATE TABLE book (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  title varchar(255) NOT NULL
);

MySQL

CREATE TABLE book (
  id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
  title varchar(255) NOT NULL
);

Используя PostgreSQL следующий фрагмент кода Spring Boot JdbcTemplate, используемый для работы:

...
NamedParameterJdbcTemplate jdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
KeyHolder keyHolder = new GeneratedKeyHolder();
SqlParameterSource params = new MapSqlParameterSource("title", "Harry Poter");
jdbc.update("INSERT INTO book (title) VALUES (:title)", params, keyHolder);
Map<String, Object> key = keyHolder.getKeyList().get(0);
// use my key

, но теперь с MySQL я не могу получить ключ UUID - KeyHolder пуст. Если ключ является числом, тогда MySQL извлекает его.

Как мне заставить его работать снова?

Версии:

MySQL 8.0
Spring Boot 2.2.4

...