2017-02-16 9 views
0

Я пытаюсь интегрировать Spring-пакетный администратор в существующую пакетную программу весны. Это отлично работает с hsqldb, но когда мы настраиваем его на DB2, он выдает исключение SqlIntegrityConstraintViolationException. Таблицы Db2 уже были созданы в DB2 с использованием сценария по умолчанию, предоставленного в банке администратора.Spring Batch Admin Integration to DB2 throwing SqlIntegrityConstraintViolationException

Мы используем кварцевый планировщик для запуска заданий.

Вот исключение след

Caused by: org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT into OD1.ABC_BATCH_JOB_EXECUTION(JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, VERSION, CREATE_TIME, LAST_UPDATED, JOB_CONFIGURATION_LOCATION) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; AN UPDATE, INSERT, OR SET VALUE IS NULL, BUT THE OBJECT COLUMN *N CANNOT CONTAIN NULL VALUES. SQLCODE=-407, SQLSTATE=23502, DRIVER=3.62.56; nested exception is com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: AN UPDATE, INSERT, OR SET VALUE IS NULL, BUT THE OBJECT COLUMN *N CANNOT CONTAIN NULL VALUES. SQLCODE=-407, SQLSTATE=23502, DRIVER=3.62.56 
     at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:249) 
     at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:605) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:818) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:874) 
     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:878) 
     at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.saveJobExecution(JdbcJobExecutionDao.java:157) 

Конфигурация выглядит следующим образом

#DB2 configuration 
batch.job.jndi=jdbc/DBOMS 
batch.tableprefix=OD1.ABC_BATCH_ 
batch.schema.script= 
batch.drop.script= 
batch.business.schema.script= 
batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.DB2SequenceMaxValueIncrementer 
batch.job.configuration.file.dir=target/config 
batch.data.source.init=false 
batch.job.service.reaper.interval=60000 
batch.isolationlevel=ISOLATION_READ_COMMITTED 
batch.jdbc.testWhileIdle=false 
batch.jdbc.validationQuery= 
batch.database.incrementer.parent=sequenceIncrementerParent 
batch.table.prefix=OD1.ABC_BATCH_ 
+0

Сообщение об ошибке говорит, что вставка в OD1.ABC_BATCH_JOB_EXECUTION содержит нулевое значение для обязательного столбца. Я не знаю, почему это относится к 'COLUMN * N' вместо фактического имени столбца, но в этой таблице нет никаких обязательных столбцов. –

ответ

0

Мы нашли проблему, мы дали сценарии таблицы для администраторов баз данных. Но DBA создал таблицу в соответствии со стандартами, которые они следуют, и сделал ее START_TIME TIMESTAMP NOT NULL WITH DEFAULT вместо START_TIME TIMESTAMP DEFAULT NULL. Это вызывает проблему, надеюсь, что это поможет кому-то.