使用struts spring hibernatehibernate 删除级联 必然出错。因为有级联public void delete(Object object){
try {
sessionFactry.getCurrentSession().delete(object);
} catch (DataAccessException e) {
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}catch (RuntimeException e) {
e.printStackTrace();
System.out.print("dao");
System.out.println("aaa");
}catch(Exception ex){
System.out.println(ex.getMessage()+"aaaaaaaaaaaaaaaaaaaaaaa");
}finally{
System.out.print("bbbb");
}
}try到了错误。。
catch不出来了。有高人能指点下吗。
catch finally都没有执行但是后台报错了
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 2292, SQLState: 23000
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-02292: 违反完整约束条件 (DRKJ.FKC6CACC44C8E9BF8A) - 已找到子记录
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
try {
sessionFactry.getCurrentSession().delete(object);
} catch (DataAccessException e) {
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}catch (RuntimeException e) {
e.printStackTrace();
System.out.print("dao");
System.out.println("aaa");
}catch(Exception ex){
System.out.println(ex.getMessage()+"aaaaaaaaaaaaaaaaaaaaaaa");
}finally{
System.out.print("bbbb");
}
}try到了错误。。
catch不出来了。有高人能指点下吗。
catch finally都没有执行但是后台报错了
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 2292, SQLState: 23000
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-02292: 违反完整约束条件 (DRKJ.FKC6CACC44C8E9BF8A) - 已找到子记录
八月 03, 2012 10:58:49 上午 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
要关闭session,
e.printStackTrace();
System.out.print("dao");
System.out.println("aaa");
}在这里报的错误,e.printStackTrace();打印出很多行
Session session=HibernateUtil.currentSession();
Transaction ts=session.getTransaction();
ts.begin();
SysUser user=new SysUser();
user.setUsrId(new Long(1));
try {
session.delete(user);//级联对象,必报异常
ts.commit();
session.close();
} catch (RuntimeException e) {
System.out.println("catch do!");
}finally{
System.out.println("finally do!");
}结果:异常信息能够正常进行捕获
那对于在项目的Hibernate捕获不了异常信息,网上有这么一种理解:
进入Service方法前,开始事务,service的方法,dao的方法,
dao方法结束,service方法结束,注意,直到Service方法执行完,数据都没有提交数据库,
因为是在数据库的约束性条件出错。
最后,spring的事务模版提交事务,出错。
所以只在调用Service方法的action层才能俘获异常
---------------------------------------------------------------
结论:异常的捕获在业务层进行处理,不要丢给数据库持久层!