一、 EntityManager是JPA中用於增刪改查的接口,它的作用相當於一座橋梁,連接內存中的java對象和數據庫的數據存儲。其主要的方法定義如下:
Entity生命周期中的Managed,Detached,Removed三種狀態變化過程,如下圖所示:
New:瞬時對象,尚未有id,還未和Persistence Context建立關聯的對象。
Managed:持久化受管對象,有id值,已經和Persistence Context建立了關聯的對象。
Datached:游離態離線對象,有id值,但沒有和Persistence Context建立關聯的對象。
Removed:刪除的對象,有id值,尚且和Persistence Context有關聯,但是已經准備好從數據庫中刪除
狀態名
|
作為java對象存在
|
在實體管理器中存在
|
在數據庫存在
|
New(瞬時對象)
|
yes
|
no
|
no
|
Managed(持久化受管對象)
|
yes
|
yes
|
yes
|
Detached(游離態離線對象)
|
no
|
no
|
no
|
Removed(刪除的對象)
|
yes
|
yes
|
no
|
二名
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實例;
8、entityManager.unwrap(Session.class):獲取Session對象
狀態名