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