場景:同一個方法裏,須要將前一部分執行的數據保存到數據庫。後半部分讀取數據時從數據庫裏獲取,而不是獲取到緩存裏的數據。html
理解eneityManager的這三個方法的做用和區別,首先須要分清楚PersistenceContext 和 EntityManager.java
PersistenceContext:是entity的一個實例。數據庫
EntityManager:是和PersistenceContext聯繫在一塊兒的,被用來建立、刪除或者查找一個持久化Entity實例。api
換句話來講PersistenceContext能夠說成是數據庫的緩存。緩存
1.mergeoracle
經過entityManager將一個存在的實體「同步到」persistenceContext中。htm
實體的狀態將從其單獨的狀態轉換爲受persistenceContext管理的狀態。rem
若是Entity是新建立的,則這個方法相似於persist()這個方法。get
若是Entity已經存在的,則只做爲更新操做。同步
2.Flush
將PersistenceContext的信息同步到數據庫中。
當觸發Flush這個動做的時候,全部的實體都將會被insert/update/remove到數據庫中。
數據庫不會觸發Commit的操做。
3.Refresh
Refresh的做用是從數據庫中將Entity的狀態進行更新操做。若是Entity和數據庫中的數據不一致,將更新數據庫中的數據到Entity中。