Я использую Spring framework и хотел бы вставить строку в DB, чтобы иметь свой идентификатор, который необходим для дальнейшей обработки. Вставка запроса приведена ниже, это простой запрос без параметров. Но это еще хуже, потому что, как построить рабочий вызов, используя executeAndReturnKey
от SimpleJdbcInsert
? Это SQL-запрос для вставки. Но я не знаю, можно ли использовать его в экземпляре simpleJdbcInsert
.Как вставить строку в базу данных весной, используя только автоматически созданные значения и вернуть идентификатор?
insert into sdc_import_run(id_import_run, create_date)
values(nextval('seq_import_run'),now())
Я попытался
Number genId = simpleJdbcInsert.withTableName("sdc_import_run")
.usingGeneratedKeyColumns("id_import_run")
.executeAndReturnKey(new MapSqlParameterSource());
Это не работает, дело в том, что они хотят, чтобы все параметры таблицы, но я не хочу ни один из них, я хочу, чтобы вставить только автоматически сгенерированной : id_import_run
(первичный ключ) и create_date
. В результате я хочу иметь вставленный идентификатор в переменной. Как бы Вы это сделали?
EDIT Такой подход работает нормально.
public Integer persistInsertImportRunForId(){
String queryString = getSql("insertImportRunForId");
KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplate.update(con -> {
return con.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS);
}, holder
);
return CommonUtils.tryOrGet(() -> holder.getKeys().get("id_import_run"), null);
}