private  void  findStudents(){
         SessionFactory  sft=new Configuration().configure().buildSessionFactory();
        
         Session session=sft.openSession();
         session.beginTransaction();
        
         Query query=session.createQuery("from student as t where t.id=:sid");
         query.setString("sid", "789"); 
        
         List st=query.list();
        
         for(Iterator sit=st.iterator();sit.hasNext()){
                        Student stu=(Student)sit.next();
 System.out.println(stu.getName());
  session.getTransaction().commit();
  session.close();
  sft.close();
   
   }
        

}}这两句话 报错 求解
到底正确的应该怎么写啊

解决方案 »

  1.   


    for(Iterator sit=st.iterator();sit.hasNext()){
    Student stu=(Student)sit.next();
    System.out.println(stu.getName());
    session.getTransaction().commit();
    session.close();
    sft.close();
      
    }
      

  2.   

    为什么提交事物会在循环中出现,在list之后就提交
      

  3.   

    呵呵!我是说你哪里的代码有误!假如的前面的session是不为空的话....你查询怎么要用到事务呢?看看事务用法
    还有你的session怎么是在for里面关闭的呢?像你之前的代码出现的错误是“session was already closeed”是吧!没有异常处理的话,close放到for外面。一般是放在finally块的。
      

  4.   

    for(Iterator sit=st.iterator();sit.hasNext();){  //这里少了分号
      

  5.   

    除了6L说的以外应该没有什么错,session在for循环里面不影响效果。把错误信息贴出来看一下。
      

  6.   

    一楼回复的就是说明它for这范围的代码有误!不仅少了“;”,而且里面的代码也有问题!评论的太....呵呵
      

  7.   


    session放在for里面是一大错误!而且影响非常大,他可以让你看见红色的字体”session was closeed",而且数据还是不完整的