除非你把autocommit设为false,否则是自动保存的

解决方案 »

  1.   

    哪里有卖讲Hibernate应用的书?
      

  2.   

    session.flush(); 相当于commit。
      

  3.   

    8.4. 更改在当前session中保存或者装载的对象
    持久化实例(就是通过session装载、保存、创建或者查询出的对象)可以被程序操作,所做的任何修改都会在Session清洗(flushed)的时候被持久化(参见后面的“flushing”部分)。
    8.9. 清洗(Flushing) -- 这个词很难翻译,不能使用“刷新”,因为刷新一词已经被"refresh"使用了。有什么好的建议?
    每件隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象和JDBC连接中的状态进行同步。这个过程被称为清洗(flush),默认会在下面的时间点执行: 在某些find()或者iterate()调用的时候 在net.sf.hibernate.Transaction.commit()的时候 在Session.flush()的时候 涉及的SQL语句会按照下面的顺序安排: 所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序 所有对实体进行更新的语句 所有进行集合删除的语句 所有对集合元素进行删除,更新或者插入的语句 所有进行集合插入的语句 所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序 (有一个例外时,如果对象使用native方式进行 ID 生成的话,它们一执行save就会被插入。) 除非你明确地发出了flush()指令,关于Session合时会执行这些JDBC调用是完全无法保证的,只能保证它们执行的前后顺序。当然,Hibernate保证,Session.find(..)绝对不会返回已经失效的数据,也不会返回错误数据。