孙卫琴 <<精通Hibernate>>一书中对Session的save()方法有如下说明:
"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句."那么试问, 如下代码为何正常执行?//将session清理缓存模式改为never, 也就是在commit时, 不清理缓存, 既然没清理缓存那么为什么SQL insert执行成功了呢?
Session sessin = SessionFactory.getSession();
Transaction tx = session.beginTransaction();
session.setFlushMode(FlushMode.NEVER);
User user = new User();
session.save(user);
tx.commit();
session.close();

解决方案 »

  1.   

    close方法会先把数据发出去,然后再执行关闭操作的吧。
      

  2.   

    乱扯,save方法是立即触发sql的
      

  3.   

    commit时候,会自动执行flush方法的,这里面有很多细节的东西 很复杂的 现在搞清楚了 一段时间不用还是忘了 而且真正项目中这种东西很少用到 (反正我是没用到过,算我是菜鸟吧呵呵) 
      

  4.   

    孙卫琴 <<精通Hibernate>>一书中对Session的save()方法有如下说明:
    "save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句."那么试问, 如下代码为何正常执行?//将session清理缓存模式改为never, 也就是在commit时, 不清理缓存, 既然没清理缓存那么为什么SQL insert执行成功了呢?恩。。那个书上说的没错。我不知道你理解了清理缓存的意义没有。其实就是当你调用Save()方法的时候,把事物提交后它就会执行成功了,往数据库中插入记录的。而正在当你执行时,它会把该条记录和缓存中的记录做比对,如果比对不成功,恩,就会生成相应的SQL语句了。如果比对成功,就不会生成SQL语句了。恩。还有,就是调用事物提交的方法时,是会先去调用清理缓存的方法的。为的就是清理缓存时,把缓存中的数据和数据库做比对。
      

  5.   

    你有事物提交啊,都提交了,肯定insert了
      

  6.   

    session.setFlushMode(FlushMode.NEVER); 这句代码 已经设置了 在commit的时候不会清理缓存!
    也就是说下列代码 没有执行清理缓存的操作 但是却能成功的向数据插入数据 可是孙卫琴说"save()方法并不立即执行SQL insert语句. 只有当Session清理缓存时才会执行SQL insert语句." 那么既然我没清理缓存 那为什么会执行sql呢 难道说commit也有很flush一样的作用?Session sessin = SessionFactory.getSession();
    Transaction tx = session.beginTransaction();
    session.setFlushMode(FlushMode.NEVER);
    User user = new User();
    session.save(user);
    tx.commit();
    session.close();