Как автоматически установить значение идентификатора в sql, используя jdbcItemWriter - PullRequest
0 голосов
/ 24 апреля 2020
@Bean
@StepScope
public JdbcBatchItemWriter<Object> jobItemWriter() {
    JdbcBatchItemWriter<Object> itemWriter = new JdbcBatchItemWriter<Object>();
    itemWriter.setDataSource(targetDataSource);
    itemWriter.setSql("INSERT INTO customer (id,name,product) VALUES("Statement.RETURN_GENERATED_KEYS,:name,:product");
    return itemWriter;
}

@Bean
public Step slaveStep() {       
    return stepBuilderFactory.get("slaveStep")
            .chunk(chunkSize)
            .reader(jobItemReader(null, null))
            .chunk(fethcSize)
            .writer(jobItemWriter())
            .throttleLimit(gridSize)
            .build();
}

Привет! Я пытаюсь автоматически увеличить значение первичного ключа с помощью Spring Batch

Чтение значений из таблицы Source Customer с помощью JDBCItemReader jobItemReader ()

Source Customer Table: name product

id таблицы целевых клиентов - имя первичного ключа product

Вывод, вызванный: java. sql .BatchUpdateException: дублирующаяся запись '1' для ключа 'customer.PRIMARY'

Как я могу увеличить значение id в jdbcItemWriter?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вместо использования простого id рассмотрите возможность использования nextval('hibernate_sequence')

0 голосов
/ 24 апреля 2020

Определите в своей таблице клиентов id как AUTO_INCREMENT

, как это

CREATE TABLE customer (
     id INT NOT NULL AUTO_INCREMENT,
     ....

Если вы хотите получить значение до вставки, это не будет возможно, потому что авто -increment обрабатывается базой данных при вставке данных.

Может быть, вы можете сделать это:

  • вставить вид данных пустой строки
  • восстановить значение автоинкремента было сгенерировано
  • выполнить ваши вычисления на основе этого идентификатора
  • обновить строку, чтобы поместить полное представление данных - (используя автоинкремент, сгенерированный ранее в предложении where запроса на обновление, для определить, какая строка обновляется)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...