1. 程式人生 > >JPA的幾個常用方法

JPA的幾個常用方法

【1】persist():將臨時狀態的物件儲存進資料庫。【插入一條新記錄】

  1. entityManager.persist(modelObject);<span style="color:#FF0000;">//由於涉及資料庫增刪改,執行該語句前需啟用事務</span>

【2】merge():將物件存入資料庫,不同於persist(),merger()對於操作的物件,如果物件存在於資料庫則對物件進行修改,

如果物件在資料庫中不存在,則將該物件作為一條新記錄插入資料庫。

  1. entityManager.merge(modelObject);<span style=
    "color:#FF0000;">//由於涉及資料庫增刪改,執行該語句前需啟用事務</span>

【3】find()與getReference():查詢物件。不同點:當物件不存在時,find()返回null, getReference()會丟擲javax.persistence.EntityNotFoundException異常
  1. entityManager.find(Class<T> ModelObject.class , int key); <span style="color:#FF0000;">//引數一是實體類的class,引數二是實體主鍵物件
  2. (*關於find()與getReference()更詳細的介紹,可以檢視<a target=_blank target="_blank"
     href="http://blog.sina.com.cn/s/blog_6e25da9b0101ct5g.html">點選開啟連結</a>)  
  3. </span>  

【4】remove():將物件從資料庫中刪除。

  1. entityManager.remove(entityManager.getReference(ModelObject.class,key));  

【5】refresh(Object obj):重新從資料庫中讀取資料。

【6】contains(Object obj):判斷物件是否在資料庫中存在,返回true \ false。

【7】flush():立即寫入資料庫。

執行persist()、merger()時,資料並不是立即寫入資料庫中,而是由JPA快取起來,在執行flush()時寫入。在事務提交的時候,JPA會自動執行flush()一次性儲存所有資料。

如果需要立即儲存,可手動執行flush()。

setFlushModel():修改EntityManager的Flush模式。

EntityManager的Flush模式預設為FlushModel.AUTO,這種模式下,在執行查詢(指使用JPQL語句查詢時,不包括find()和getReference()查詢)或事務提交時自動執行flush()。通過setFlushModel( FlushModel f )設定為FlushModel.COMMIT,該模式下只有在事務提交時才會執行flush()寫入資料庫。

【8】clear():清除物件。

預設情況下,EntityManager會檢視所有的實體類物件的修改,在事務提交時,會自動將修改儲存進資料庫,相應的會消耗部分內容。可以用clear()清除所有被監視的實體類物件。但需要注意,clear()之後,對實體類所做的修改將會丟失。