3

エンティティに新しい列を追加したところ、奇妙なことが起こっています。

エンティティは以前:

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 バッチ 03/05/2011 06:41:11 エラー [JDBCExceptionReporter.java:78] - ORA- 01400: ("mydb"."mytable"."PUBLISHED_DAYS_SINCE_LAST_PUB") に NULL を挿入できません

バッチ 03/05/2011 06:41:11 エラー [AbstractFlushingEventListener.java:301] - データベースの状態をセッション org.hibernate.exception.ConstraintViolationException と同期できませんでした: 挿入できませんでした: [com.xxx.myentity] at 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.event.def.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:298) で org.hibernate.event.def.DefaultFlushEventListener.onFlush で org.hibernate.engine.ActionQueue.executeActions (ActionQueue.java:167) で(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.org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321) で AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116) で.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() at 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"."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.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 で初期化されるため、null であってはならないため、何が問題なのかわかりません。

また、javap を使用してエンティティ クラスを調べたところ、エンティティの正しいバージョンのようです。新しい属性がそこにあります。

誰?ありがとう

4

1 に答える 1

-1

int を Integer に変更して、それが役立つかどうかを確認してください

于 2011-05-04T08:18:27.163 に答える