[java] view plaincopyprint? <<精通Hibernate java對象持久化技術詳解>> ,flush()方法進行清理緩存的操做,執行一系列的SQL語句,但不會提交事務;commit()方法會先調用flush()方法,而後提交事務. 提交事務意味着對數據庫所作的更新會永久保持下來 所謂清理,是指Hibernate 按照持久化象的狀態來同步更新數據庫 Flush()後只是將Hibernate緩存中的數據提交到數據庫,若是這時數據庫處在一個事物當中,則數據庫將這些SQL語句緩存起來,當Hibernate進行commit時,會告訴數據庫,你能夠真正提交了,這時數據纔會永久保存下來,也就是被持久化了. commit針對事物的 flush針對緩存的 同步到數據庫中後只要沒有commit仍是能夠rollback的 public void testSave1() { Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User1 user = new User1(); user.setName("李四"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //由於user的主鍵生成策略採用的是uuid,因此調用完成save後,只是將user歸入到了session的管理 //不會發出insert語句,可是id已經生成,session中existsInDatebase狀態爲false session.save(user); //調用flush,hibernate會清理緩存,執行sql //若是數據庫的隔離級別設置爲未提交讀,那麼咱們能夠看到flush過的數據 //而且session中existsInDatebase狀態爲true session.flush(); //提交事務 //默認狀況下commit操做會先執行flush清理緩存,因此不用顯示的調用flush //commit後數據是沒法回滾的 tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } } public void testSave2() { Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); User2 user = new User2(); user.setName("張三1"); user.setPassword("123"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //由於user的主鍵生成策略爲native,因此調用session.save後,將執行insert語句,返回有數據庫生成的id //歸入了session的管理,修改了session中existsInDatebase狀態爲true //若是數據庫的隔離級別設置爲未提交讀,那麼咱們能夠看到save過的數據 session.save(user); tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } }