public void testSave(){
   Session session = HibernateUtil.getSessionFactory().openSession();
   User user = new User();
   session.save(user);//此时输出sql语句,而且数据自动提交,都无需开启实务,而执行update,delete操作却不行
   session.close();
}求大虾解救我!

解决方案 »

  1.   

    确定数据库里有新增的user记录?不明白,等高人吧
      

  2.   

    你 User user = new User(); 直接去update or delete?   不错才怪
      

  3.   

    不是的,new User()是用来save的,我执行update或者delete时候操作的数据是持久态的。
      

  4.   

    我说的很清楚了啊,就是执行保存一条新数据的时候会自动提交,甚至不用开启事务,这个时候我就怀疑是不是hibernate设置的自动提交,但我再试update,delete操作的时候却必须要开启事务和手动提交。
      

  5.   

    public void testSave(){
      Session session = HibernateUtil.getSessionFactory().openSession();
      User user = new User();  session.save(user);//你这里updete delete的时候 因为你是new 了一个 user对象
    但是 对于hibernate 来说  session.update(user)/delete(user), user这个对象不明确
    所以会失败
     如果你在前面加一个  user.session.get/load(User.class,id);  那么应该可以  session.close();
    }
      

  6.   

    你真厉害,保存不开事务....
    非查询操作都是需要开启事务的,还有不是说直接new一个对象就是可以随便update跟delete的
    好好看看Hibernate去
      

  7.   

    是的..muanping85说得对..
    当你new 一个对象时,这个对象是瞬时态的,这时调用save时,可以insert 一条新的..
    但你用update或delete 时,这时只能操作持久态的对象..所以你可以先用一个ID,get/load它,然后就可以update/delete 了...
      

  8.   

    hibernate更新,删除,默认是根据ID 来执行的,
      1.save保存:
              User user=new User();
              session.save(user);
     
      2.update/delete更新或者删除(数据库中必要有对应的ID):
              session.update(session.load(User.class,id));  
              session.delete(session.load(User.class,id)); 
           如果说要new 一个User对象,必须保证User的Id对应数据库里的。
                User user=new User();
               user.setId(数据库中对应的id);//设置User的Id
               session.update(user);此时才会成功
      

  9.   


          不是不明白,是你没把问题说清楚!他们说的是对的,hibernate在3种各自的状态下操作是有限制的!
      

  10.   

    我觉得是不是你使用的数据库的默认事物隔离等级是read uncommited,造成的脏读引起的
    实际上你的保存还是没有提交。
      

  11.   

    hibernate save 
    你new 出来的一个实体 hibernate帮你插入数据库(自增长id)。你update 和delete 都需要id才能操作。更新和删除是需要id的。你更新谁?删除谁?有id  hibernate才会知道的。然后才会帮你执行操作。
      

  12.   

    楼主,他们说的是对滴,你不开事物,你数据库里面的user表的主键id是自增的。update,delete需要id值,不然hibernate是没法做的,hibernate是好用,但是没到你什么都不给他,他就能知道你想要做什么的地步。you understand ?
      

  13.   

    new 的对象在数据库中hibernate 无法确认是否存在,update和delete的时候需要数据确定存在,所有save的时候可以,但此前提是你已开启事务自动提交,更新删除操作与这个无关
      

  14.   

    我今天遇到跟你一样的问题,后面调试发现update、delete删除的是缓存的,并未更新到数据库,调用  session.Flush()就可以更新到数据库
      

  15.   

    session是个一级缓存,当你save的时候,不会存放在缓存中,直接添加到数据库!update和delete时,会先将session缓存的数据删除,然后提交到数据库,但是你这个时候已经将session关闭了!给分。上面的都是爷啊,LZ说的很清楚了,他先查了再删的。。还一直在说别人id的问题。。
      

  16.   

    那update或delete时不开启事务又报什么错呢
    有错误方便才方便准确推理
      

  17.   

    看得我怎么这么生气呢,一个个都什么理解能力啊,23楼正解啊,update或delete后flush一下就完了