Как использовать KeyHolder в Spring Boot? - PullRequest
1 голос
/ 01 октября 2019

Я пытался сохранить данные в базе данных H2 с помощью Spring Boot JdbcTamplate с помощью следующего кода:

schema.sql:

create table if not exists Taco (
    id identity,
    name varchar(50) not null,
    createdAt timestamp not null
);

, который является моим классом хранилища:

public class JdbcTacoRepository {
    public long saveTacoInfo(Taco taco) {
        taco.setCreatedAt(new Date());
        PreparedStatementCreator psc = new PreparedStatementCreatorFactory(
                "insert into Taco (name, createdAt) values ( ?,? )"
                , Types.VARCHAR, Types.TIMESTAMP
        ).newPreparedStatementCreator(Arrays.asList(
                taco.getName()
                , new Timestamp(taco.getCreatedAt().getTime())
        ));

        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbc.update(psc, keyHolder);

        return Objects.requireNonNull(
            keyHolder.getKey()         // in this place keyHolder.getKey() is null
        ).longValue();
    }
}

но после вызова jdbc.update(psc, keyholder); я получаю keyHolder это Null эталонный объект.

Что я не так сделал? Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 01 октября 2019

Попробуйте добавить

preparedStatementCreatorFactory.setReturnGeneratedKeys(true);

, прежде чем создавать PreparedStatementCreator с PreparedStatementCreatorFactory. Затем созданный psc должен вернуть сгенерированный ключ, который затем может быть получен с помощью KeyHolder.

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