Я просто добавляю новый столбец для сущности, и происходит странная вещь.
Объект был ранее:
int publishedDayNb;
public int getPublishedDayNb() {
return publishedDayNb;
}
public void setPublishedDayNb(int publishedDayNb) {
this.publishedDayNb = publishedDayNb;
}
А сущность сейчас:
int publishedDayNb;
int publishedDayNbSinceLastPublication;
public int getPublishedDayNb() {
return publishedDayNb;
}
public void setPublishedDayNb(int publishedDayNb) {
this.publishedDayNb = publishedDayNb;
}
@Column(name="published_days_since_last_pub")
public int getPublishedDayNbSinceLastPublication() {
return publishedDayNbSinceLastPublication;
}
public void setPublishedDayNbSinceLastPublication(int publishedDayNbSinceLastPublication) {
this.publishedDayNbSinceLastPublication = publishedDayNbSinceLastPublication;
}
Как видите, я только что добавил столбец.
SQL-скрипт для этого в базе данных был:
alter table mytable add published_days_since_last_pub number(10,0);
update mytable set published_days_since_last_pub=0;
alter table mytable modify published_days_since_last_pub number(10,0) not null;
Я выполняю пакетную обработку Java, читаю файл, вставляю новые записи сущностей и обновляю существующие.
Он отлично работает на локальном и на сервере разработки, но на сервере проверки, я получил эту ошибку во время обработки нового объекта (вставка)
ВЫПУСК 03/05/2011 06:41:11 ПРЕДУПРЕЖДЕНИЕ
[JDBCExceptionReporter.java:77] - SQL
Ошибка: 1400, SQLState: 23000 BATCH
03.05.2011 06:41:11 ОШИБКА
[JDBCExceptionReporter.java:78] -
ORA-01400: невозможно вставить NULL в
( "MYDB". "ТуЬаЫй". "PUBLISHED_DAYS_SINCE_LAST_PUB")
Пакет от 05.03.2011 06:41:11 ОШИБКА
[AbstractFlushingEventListener.java:301]
- Не удалось синхронизировать состояние базы данных с сеансом
org.hibernate.exception.ConstraintViolationException:
не удалось вставить:
[Com.xxx.myentity]
в
org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:71)
в
org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelper.java:43)
в
org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2262)
в
org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2655)
в
org.hibernate.action.EntityInsertAction.execute (EntityInsertAction.java:60)
в
org.hibernate.engine.ActionQueue.execute (ActionQueue.java:279)
в
org.hibernate.engine.ActionQueue.executeActions (ActionQueue.java:263)
в
org.hibernate.engine.ActionQueue.executeActions (ActionQueue.java:167)
в
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:298)
в
org.hibernate.event.def.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:27)
в
org.hibernate.impl.SessionImpl.flush (SessionImpl.java:1001)
в
org.hibernate.impl.SessionImpl.managedFlush (SessionImpl.java:339)
в
org.hibernate.transaction.JDBCTransaction.commit (JDBCTransaction.java:106)
в
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit (HibernateTransactionManager.java:655)
в
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (AbstractPlatformTransactionManager.java:732)
в
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager.java:701)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning (TransactionAspectSupport.java:321)
в
org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:116)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:171)
в
org.springframework.aop.framework.Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept (Cglib2AopProxy.java:635)
в
com.xxx.eplatform.websites.webstore.batch.processor.DistrinetDataProcessor $$ EnhancerByCGLIB $$ 42d43018.processDistrinetLine () в
com.xxx.eplatform.websites.webstore.batch.services.impl.WebstoreImporterServiceImpl.importDistrinetFile (WebstoreImporterServiceImpl.java:71)
в
com.xxx.eplatform.websites.webstore.batch.WebstoreImportBatch.execute (WebstoreImportBatch.java:142)
в
com.xxx.eplatform.websites.webstore.batch.WebstoreImportBatch.main (WebstoreImportBatch.java:104)
Вызывается: java.sql.SQLException:
ORA-01400: невозможно вставить NULL в
( "MYDB". "ТуЬаЫй". "PUBLISHED_DAYS_SINCE_LAST_PUB")
в
oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:112)
в
oracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java:331)
вoracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java:288)
в
oracle.jdbc.driver.T4C8Oall.receive (T4C8Oall.java:745)
в
oracle.jdbc.driver.T4CPreparedStatement.doOall8 (T4CPreparedStatement.java:216)
в
oracle.jdbc.driver.T4CPreparedStatement.executeForRows (T4CPreparedStatement.java:966)
в
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout (OracleStatement.java:1170)
в
oracle.jdbc.driver.OraclePreparedStatement.executeInternal (OraclePreparedStatement.java:3339)
в
oracle.jdbc.driver.OraclePreparedStatement.executeUpdate (OraclePreparedStatement.java:3423)
в
org.hibernate.jdbc.NonBatchingBatcher.addToBatch (NonBatchingBatcher.java:23)
в
org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2242)
... еще 21
Я не понимаю, что не так, поскольку примитивный тип, который я добавил к сущности, всегда инициализируется в 0, поэтому он не должен быть нулевым.
Я также посмотрел свой класс сущности с помощью javap, и кажется, что это правильная версия сущности: там есть мой новый атрибут.
Кто-нибудь? Спасибо