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 批处理、读取文件、插入新实体条目并更新现有条目。

它在本地和开发服务器中工作正常,但在验证服务器中,我在新实体处理期间遇到此错误(插入)

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")

BATCH 03/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(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) at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732) at org.springframework .transaction.support。AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116) at org .springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635) at 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.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java) 的 oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216) 的 oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745):第966章) :3423) 在 org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242) ... 21 更多

我不明白出了什么问题,因为我添加到实体的原始类型始终初始化为 0,因此它不应该为空。

我还用 javap 查看了我的实体类,它似乎是实体的正确版本:我的新属性就在那里。

任何人?谢谢

4

1 回答 1

-1

只需将 int 更改为 Integer 并查看是否有帮助

于 2011-05-04T08:18:27.163 回答