今天写了个程序 Spring整合Hibernate 使用Spring中的HibernateTemplate 通过配置程序可以运行起来 并可以操作数据库 但程序执行过程中会有异常 不知道是什么错误 一下是程序执行的异常
Hibernate: insert into test.student (STUNAME, AGE, SEX, PHONE) values (????)
java.lang.RuntimeException
    at com.stu.server.StudentServer.addStudentByCondition(StudentServer.java:
30)
    at com.stu.server.StudentServer$$FastClassByCGLIB$$8fef4d1a.invoke(
<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:
149)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:
696)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
149)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:
106)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
171)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:
631)
    at com.stu.server.StudentServer$$EnhancerByCGLIB$$f5f4d830.addStudentByCondition(
<generated>)
    at com.stu.test.Test.main(Test.java:
33)
Hibernate: update test.student set STUNAME
=?, AGE=?, SEX=?, PHONE=? where ID=?
还麻烦各位帮忙指点一下 程序我上传上来了,另外还请哪个大哥帮忙指出这程序的不足之处

程序下载地址:http://www.blogjava.net/Files/lifenote/HibernateInSpring.rar
posted on 2007-12-07 10:20 LifeNote 阅读(1760) 评论(11)  编辑  收藏 所属分类: JavaHibernateSpring
Comments
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 11:12
    我知道异常了 我使用的是spring的声明事务 当年龄小于30的时候就抛异常并且回滚事务 可现在并没有回滚 还麻烦个位看看 多谢
    getStudentDAO().save(stu);
    stu.setAge( stu.getAge()+10);
    if(stu.getAge()<30){ //这里抛个异常就回滚了 不用rollback了
    throw new RuntimeException();
    }  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误 [未登录]
    flustar
    Posted @ 2007-12-07 11:28
    建议你把hbm文件中的 catalog="test" 去掉 另外你的hibernate.cfg.xml是多余的  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    Tiger F
    Posted @ 2007-12-07 11:32
    两个问题:
    既然使用了spring的声明事物,就不应该再自己声明事物了。spring的声明事物就是检查是否有异常出现来决定最后是提交还是回滚的,所以必须使用异常。
    所以你的server程序应该写为:(似乎根本不需要回滚)
    public void addStudentByCondition(Student stu){
    if(stu.getAge()>=30)
    getStudentDAO().save(stu);
    }
    如果因为有其他逻辑需要回滚的话,应该这样:
    public void addStudentByCondition(Student stu){
    if(stu.getAge()<30)
    throw new MyBizException(); // 建议自定义一个有业务意义的异常
    getStudentDAO().save(stu);
    }

    另一个问题,你的Dao类在使用templage方法是都自己做了异常处理,但是你的异常处理无实质内容,这个做法会影响到事物的。如果你不知道应该如何处理这些异常,最好就是不要管他。
      回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 11:34
    catalog="test" 这个只是数据库的名字啊  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 11:38
    既然我在
    if(stu.getAge()<30){ //这里抛个异常就回滚了 不用rollback了
    throw new RuntimeException();
    }这里抛了异常为什么程序还是没有回滚呢  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    Tiger F
    Posted @ 2007-12-07 14:41
    如果你的程序还是原来那个样子,虽然抛出了异常也是被你自己捕获了,并没有被spring捕获到。
    spring既然不知道发生了异常,当然不会回滚事物了。
      回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 16:28
    请问那要如何处理事务呢 我有些糊涂了 麻烦 把那程序修改后把代码贴上来 好么 十分感谢 学习中  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    Tiger F
    Posted @ 2007-12-07 16:30
    我贴了呀,上面。只要把addStudentByCondition函数的实现完整替换一下,至少是能回滚了。  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 16:35
    您是说
    if(stu.getAge()<30)
    throw new MyBizException(); // 建议自定义一个有业务意义的异常
    getStudentDAO().save(stu);
    }

    这里new MyBizException(); 是自己捕获了么 ?
    那这样和你说的 这个:

    虽然抛出了异常也是被你自己捕获了,并没有被spring捕获到。
    spring既然不知道发生了异常,当然不会回滚事物了。
    也没有被spring知道啊 如何回滚呢
      回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    Tiger F
    Posted @ 2007-12-07 16:59
    public void addStudentByCondition(Student stu){
    if(stu.getAge()<30)
    throw new MyBizException(); // 可以用RuntimeException替换
    getStudentDAO().save(stu);
    }

    注意,整个addStudentByCondition函数应该就这几行,而不是修改这三行。
    把你的try/catch之类的统统删除。  回复  更多评论   
  • # re: Spring整合Hibernate 莫名其妙的错误
    LifeNote
    Posted @ 2007-12-07 17:02
    哦 明白你的意思了 十分感谢!!!  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: