Sometimes when you save the obj object, one of its fields is too large to fit in the db field, which leads to the exclusion of data loss. In the following code, I am trying to catch a DataException and just throw a field and save it. However, I get an exception when saving. Why does a batch update exception occur and how do I get around it?
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);
An exception:
org.hibernate.StaleStateException: [0]; : 0; : 1 at org.hibernate.jdbc.Expectations $BasicExpectation.checkBatched( .java:85) at org.hibernate.jdbc.Expectations $BasicExpectation.verifyOutcome( .java:70) org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90) org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109) at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2382) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
,
,
,