Hibernate + Oracle, странное нулевое ограничение ограничения с примитивным типом - PullRequest
3 голосов
/ 03 мая 2011

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

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

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, и кажется, что это правильная версия сущности: там есть мой новый атрибут.

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

1 Ответ

0 голосов
/ 04 мая 2011

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

...