for(int i = 0;i < 5;i++){
    session.save(obj);
    //session.flush();使用这个数据只保存最后一个对象
    //session.clear();使用这个5个对象会全部保存  求解
}
trans.commit();
session.close();//session.flush();使用这个数据只保存最后一个对象
//session.clear();使用这个5个对象会全部保存  求解

解决方案 »

  1.   

    session.save(obj);
    trans.commit();//这句放到循环里面就可以了
      

  2.   

    因为你的OBJ没有变过,发你第一次发生SAVE时,这个OBJ就会从游离态变成持久态,当你第二次以及后面的SAVE时都是对OBJ持久态做操作,这时HIBERNATE不会向数据库发出INSERT命令,而是UPDATE命,所以不管你SAVE几次都是看到最后一条。若你想看到SAVE所有数据,你就得从新给HIBERNATE一个游离态对象。
    在FOR里面通过NEW 来重新实例化这个OBJ,
      

  3.   

    感觉就是clear每次都在清除缓存,flush是默认在commit后才清除缓存,session.setFlushMode(FlushMode.Always) 在flush试试
      

  4.   

    靠谱
    把  session.save(obj)里 obj对象的生成代码 放在for循环里
      

  5.   

    trans.commit();放到循环里面 每次循环都提交,你现在是循环完才提交。
      

  6.   

    lz应该是你这个obj有问题,你看你怎么循环这个obj都不变是不是?所以后面执行的是updte,既然有五个对象为什么不创建五个对象而是一个?应该是这样save(obj1),save(obj2)....一直到5就对了。同意三楼的,尼玛不会引用三楼啊,怎么引用他说的话~~~