使用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

解决方案 »

  1.   

    No operations allowed after connection closed.
    要关闭session,
      

  2.   

    }catch (RuntimeException e) {
    e.printStackTrace();
    System.out.print("dao");
    System.out.println("aaa");
    }在这里报的错误,e.printStackTrace();打印出很多行
      

  3.   

    下面是通过测试类来进行捕获:public static void del(){
    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层才能俘获异常
    ---------------------------------------------------------------
    结论:异常的捕获在业务层进行处理,不要丢给数据库持久层!
      

  4.   

    首先抛出的应该是Exception异常或其子类,而Error是和Exception同一级别的,同时继承于Throwable,不是Exception的子类,此处的处理代码是无法进行catch..finally的