JPA的幾個常用方法

JPA的幾個常用方法

原創 2016年07月18日 14:40:45

【1】persist():將臨時狀態的對象保存進數據庫。【插入一條新記錄】

[java] view plain copy
  1. entityManager.persist(modelObject);<span style="color:#FF0000;">//由於涉及數據庫增刪改,執行該語句前需啓用事務</span>  


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

如果對象在數據庫中不存在,則將該對象作爲一條新記錄插入數據庫。

[java] view plain copy
  1. entityManager.merge(modelObject);<span style="color:#FF0000;">//由於涉及數據庫增刪改,執行該語句前需啓用事務</span>  

【3】find()與getReference():查找對象。不同點:當對象不存在時,find()返回null, getReference()會拋出javax.persistence.EntityNotFoundException異常

[java] view plain copy
  1. entityManager.find(Class<T> ModelObject.class , int key); <span style="color:#FF0000;">//參數一是實體類的class,參數二是實體主鍵對象  
  2.   
  3. (*關於find()與getReference()更詳細的介紹,可以查看<a target=_blank target="_blank" href="http://blog.sina.com.cn/s/blog_6e25da9b0101ct5g.html">點擊打開鏈接</a>)  
  4. </span>  

【4】remove():將對象從數據庫中刪除。

[java] view plain copy
  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()之後,對實體類所做的修改將會丟失。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章