2017-02-21 64 views
1

我有下面的代碼:爲什麼session.setFlushMode(FlushMode.MANUAL)之後數據存儲到數據庫中? session.save(); (休眠)

Color color = new Color(null,"B12",null,1); 

    Session session=sessionFactory.openSession(); 
    session.setFlushMode(FlushMode.MANUAL); 

    session.beginTransaction(); 
    session.save(color); 
    session.clear(); 

    session.getTransaction().commit(); 

    session.close(); 

    sessionFactory.close(); 

我只是不明白爲什麼它的數據時,我指定的沖洗是手動存儲到數據庫?請幫我弄明白!

回答

1

原因是session.getTransaction()。commit()保存對數據庫的所有更改。看到這個stackoverflow帖子。

HIbernate commit() and flush()

沖洗是用來在提交前推的項目數據庫。

+0

你看我讀了一本名爲「JAVA持久性與湖泊」的書籍Christian Bauer,Gavin King,下面是它的一句話:「通過選擇FlushMode.MANUAL, 你可以指定只顯式調用flush與數據庫的受管狀態同步 「。在我的代碼示例中沒有明確調用flush(),那麼爲什麼它仍然存儲到數據庫中,也許還有別的東西我不知道? –

+1

通常情況下,調用數據庫將自動導致刷新。 Flushmode.MANUAL的行爲與引用的句子相似。具體提交意味着將更改保存到數據庫。這是描述它更好http://stackoverflow.com/questions/14622962/what-is-transaction-commit-in-hibernate – darthNater

+0

謝謝,我想我明白,但仍然有一點questian,我edding編輯我的代碼session.clear ()在session.save()之後。文檔說明了有關方法clear()的內容:「退出所有已加載的實例並取消所有未完成的保存,更新和刪除」。爲什麼不取消save()並仍然將數據存儲到數據庫? –