哦,我这到不知道是不是Spring集成包,似乎不是,应为我的方法是 public Serializable save(Object object) throws HibernateException; 但是Hibernate框架自己捕捉了异常,save本身并不跑出,异常轨迹如下:Hibernate: insert into Test (UserName, Des, UserCode) values (?, ?, ?) Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at com.hb.SubmitSchema.closeTransction(SubmitSchema.java:86) at com.hb.SubmitSchema.submit(SubmitSchema.java:56) at com.hb.FirstClass.main(FirstClass.java:102) Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (LISDEV.PK_TEST) at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4337) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) ... 10 more
boolean bo = false; try{ save delete update bo = true; } catch(Exception e){ bo = false; } 如果bo = true;就成功了。如果=false说明错误,有异常。
哎!!那我就在说一次你的那个跟 public Serializable save(Object object) throws HibernateException; public Serializable save(final Object entity) throws DataAccessException 这个两个异常不是一个体系。java.sql.BatchUpdateException属于检查性异常,编译器强制要求进行处理,你必须写try catch运行期异常不写try catch也一样如此。hibernate将异常进行重新包装了。类似如下:catch(java.sql.SQLException ){ throw new HibernateException(XXXX); }}你在外部调用H的方法怎么能捕获SQLException呀。 异常栈大体结构--》HibernateException在栈顶。
save
delete
update
}
catch(Exception e){
}
并定义返回类型比如
boolean returnFlag = false;
如果没有发生异常,在insert, update, delete语句后修改返回标志为true
(getHibernateTemple().save()/update()/delete();
returnFlag = true;)
如果发生异常,返回类型并不改变
最后返回定义的返回类型
就可以知道有没有异常发生了
public Serializable save(Object object) throws HibernateException;
但是Hibernate框架自己捕捉了异常,save本身并不跑出,异常轨迹如下:Hibernate: insert into Test (UserName, Des, UserCode) values (?, ?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at com.hb.SubmitSchema.closeTransction(SubmitSchema.java:86)
at com.hb.SubmitSchema.submit(SubmitSchema.java:56)
at com.hb.FirstClass.main(FirstClass.java:102)
Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (LISDEV.PK_TEST) at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4337)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 10 more
boolean bo = false;
try{
save
delete
update
bo = true;
}
catch(Exception e){
bo = false;
}
如果bo = true;就成功了。如果=false说明错误,有异常。
public Serializable save(Object object) throws HibernateException;
public Serializable save(final Object entity) throws DataAccessException
这个两个异常不是一个体系。java.sql.BatchUpdateException属于检查性异常,编译器强制要求进行处理,你必须写try catch运行期异常不写try catch也一样如此。hibernate将异常进行重新包装了。类似如下:catch(java.sql.SQLException
){
throw new HibernateException(XXXX);
}}你在外部调用H的方法怎么能捕获SQLException呀。
异常栈大体结构--》HibernateException在栈顶。
.configure("hibernate.cfg.xml").buildSessionFactory(); Session tSession = mSessionFactory.openSession();
Transaction tTransaction = tSession.beginTransaction();
UserSchema tUserSchema = new UserSchema();
tUserSchema.setUserCode("UserCode");
tUserSchema.setUserName("UserName");
try{
tSession.save(tUserSchema);
}catch(Exception ex){
System.out.println("xxx");
ex.printStackTrace();
}
tTransaction.commit();
tSession.close();
jdbc一般这么弄:
try{
tSession.save(tUserSchema);
tTransaction.commit();
}catch(Exception ex){
tTransaction.rollback();
System.out.println("xxx");
ex.printStackTrace();
}finally{
...........close
}