Session session = SimicUtil.getSession();
     Transaction tran=session.beginTransaction();
     Query query=session.createQuery("from Assignmentdescription ad where ad.Corpassignment.Id=:id and ad.Corpassignment.AssignmentState='02' and ad.Assignmentdescription3 is not null order by ad.UserDescriptionDate desc");
     query.setParameter("id",pageContext.getAttribute("number").toString());
     tran.commit();
     Assignmentdescription description=null;
     Iterator iter= query.list().iterator();
     session.clear();
     if(iter.hasNext()){
     description=(Assignmentdescription)iter.next();
     }到这一行就出错:tran.commit();

解决方案 »

  1.   

    我这几行代码是放在自定义标签里面的,不知道为什么,有时候到tran.commit()这行出错,有时候到Iterator iter= query.list().iterator();出错,真的不知道为什么了.请高手帮忙啊,
      

  2.   

    第一,你的那个hql语句看起来好复杂的。可以试着分成几个string然后再组合的办法吧。这样不容易出错的。
    第二,还要那个id的问题,最好使用具体的set×××方法。比如,id是int类型的,那么后面传入id的值的时候,最好使用setInt()方法啦,而不是使用setParameter()这个方法。
    第三,在完成tran的commit()方法之前,你的query还应该有一个执行的步骤呢。query.executeUpate()『hibernate3是这个方法,具体hibernate2好像是execute()方法就可以了,看你好像用的是hibernate2,所以,建议你看看这二者的区别。』这个你没执行,就匆匆的结束了事务,当然要报错。我就说这么多了。
      

  3.   

    你可以把sql语句先去数据库是一下
      

  4.   

    我的试了,sql语句没有问题啊
      

  5.   

    把show_sql设为true
    1.看看hibernate的sql是否正确
    2.注意一下大小写的拼写是否正确
      

  6.   

    Session session = SimicUtil.getSession();
        
        //这行代码没有有必要
        //Transaction tran=session.beginTransaction();    Query query=session.createQuery("from Assignmentdescription ad where ad.Corpassignment.Id=:id and ad.Corpassignment.AssignmentState='02' and ad.Assignmentdescription3 is not null order by ad.UserDescriptionDate desc");
        query.setParameter("id",pageContext.getAttribute("number").toString());
        
        //实现查找不需要commit
        //tran.commit();
        
        Assignmentdescription description=null;
        Iterator iter= query.list().iterator();
        session.clear();
        if(iter.hasNext()){
        description=(Assignmentdescription)iter.next();
        }