Hibernate + Oracle, странное нарушение нулевого ограничения с примитивным типом

Я просто добавляю новый столбец на объект, и происходит странная вещь.

Объект был ранее:

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, читаю файл, вставляю новые записи сущностей и обновляю существующие.

Он отлично работает на локальном и на сервере разработки, но на сервере проверки, я получил эту ошибку во время обработки нового объекта (вставка)

BATCH 03/05/2011 06:41:11 WARN [JDBCExceptionReporter.java:77] - Ошибка SQL: 1400, SQLState: 23000 BATCH 03/05/2011 06:41:11 ОШИБКА [JDBCExceptionReporter.java:78] - ORA-01400: невозможно вставить NULL в ("mydb"."Mytable"."PUBLISHED_DAYS_SINCE_LAST_PUB")

Пакет 05/05/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(AbstractEntity): org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2655) в org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) в org.hibernate.engine.ActionQueue.exuejQ: действие (279) в org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) в org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) в org.hibernate.event.def.AbstractFlushingEventLecuE.java:298) в орг.хиберне te.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) в org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1001) в org.hibernate.impl.SessionImpl.managedFlush.Ijjjj: Session в org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) в org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655) в org.springframeworkPort.Amp.Transaction.Transaction.Amp.java:732) по адресу org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701) по адресу org.springframework.transaction.interceptor.TransactionAspectSupport.mitTransactionAfter 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.bisty.processDistrinetLine() в com.xxx.eplatform.websites.webstore.batch.services.impl.WebstoreImporterServiceImpl.importDistrinetFile(WebstoreImporterServiceImpl.java:71) в com.xxx.eplatform.websites.webstore.exmp.web (веб-хранилище):142) at com.xxx.eplatform.websites.webstore.batch.WebstoreImportBatch.main(WebstoreImportBatch.java:104) Причина: java.sql.SQLException: ORA-01400: невозможно вставить NULL в (mytable). Mytable ". "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.j4. 966) по адресу oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170) по адресу oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339) по адресу oracle.jdbred.Reader.Reader.Reader.Reader.Reader.Exp.:3423) в org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) в org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242) ... еще 21

Я не понимаю, что не так, поскольку примитивный тип, который я добавил к сущности, всегда инициализируется в 0, поэтому он не должен быть нулевым.

Я также просмотрел свой класс сущности с помощью javap, и кажется, что это правильная версия сущности: там есть мой новый атрибут.

Кто-нибудь? Спасибо

1 ответ

Просто измените int на Integer и посмотрите, поможет ли это

Другие вопросы по тегам