use*_*196 5 java mysql hibernate stalestateexception
有时,当持久化obj时,其中一个字段太大而无法放入db字段,从而导致数据截断异常.在下面的代码中,我尝试捕获DataException并简单地清空该字段和重新保存.但是我在重新开始时遇到了异常.为什么会发生批量更新异常以及如何解决它?
public static void save(Object obj) throws Exception{
try{
beginTransaction();
getSession().save(obj);
commitTransaction();
}catch(Exception e){
e.printStackTrace();
rollbackTransaction();
throw e;
}finally{
closeSession(); //not needed, session obtained from sf.getCurrentSession() will auto close
}
}
public static void saveXXX(XXX rec){
try {
save(rec);
} catch (org.hibernate.exception.DataException e) {
e.printStackTrace();
saveXXX(rec, e); //causes an exception
} catch (Exception e) {
e.printStackTrace();
}
}
private static void saveXXX(WhoisRecord rec, DataException e) {
rec.setField(""); //empty out the problem field
saveXXX(rec);
例外:
org.hibernate.StaleStateException:批量更新从update [0]返回意外的行数; 实际行数:0; 预期:1
在org.hibernate.jdbc.Expectations $ BasicExpectation.checkBatched(Expectations.java:85)
在org.hibernate.jdbc.Expectations $ BasicExpectation.verifyOutcome(Expectations.java:70)
在org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
在org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
在org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
在org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
在org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
在org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
在org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2382)
在org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
在org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
在org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
在org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
在org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
在org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
在org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
在org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
在org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
在org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
在org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
.
.
.
| 归档时间: |
|
| 查看次数: |
21161 次 |
| 最近记录: |