首先簡單介紹一下Entity生命周期中的Managed,Detached,Removed三種狀態變化過程,如下圖所示:
1.entityManager.persist(Object entity); 新增數據;
如果entity的主鍵不為空,而數據庫沒有該主鍵,會拋出異常;
如果entity的主鍵不為空,而數據庫有該主鍵,且entity的其他字段與數據庫不同,persist后不會更新數據庫;
2.entityManager.find(Class<T> entityClass, Object primaryKey); 根據主鍵查找數據;
如果主鍵格式不正確,會拋出illegalArgumentException異常;
如果主鍵在數據庫未找到數據返回null;
3.entityManager.remove(Object entity); 刪除數據;
只能將Managed狀態的Entity實例刪除,由此Entity實例狀態變為Removed;
4.entityManager.merge(T entity);
將 Detached狀態的Entity實例轉至Managed狀態;
5.entityManager.clear();
將所有的Entity實例狀態轉至Detached狀態;
6.entityManager.flush();
將所有Managed狀態的Entity實例同步到數據庫;
7.entityManager.refresh(Object entity);
加載Entity實例后,數據庫該條數據被修改,refresh該實例,能得到數據庫最新的修改,覆蓋原來的Entity實例;