JPA的幾個常用方法
【1】persist():將臨時狀態的對象保存進數據庫。【插入一條新記錄】
- entityManager.persist(modelObject);<span style="color:#FF0000;">//由於涉及數據庫增刪改,執行該語句前需啓用事務</span>
【2】merge():將對象存入數據庫,不同於persist(),merger()對於操作的對象,如果對象存在於數據庫則對對象進行修改,
如果對象在數據庫中不存在,則將該對象作爲一條新記錄插入數據庫。
- entityManager.merge(modelObject);<span style="color:#FF0000;">//由於涉及數據庫增刪改,執行該語句前需啓用事務</span>
【3】find()與getReference():查找對象。不同點:當對象不存在時,find()返回null, getReference()會拋出javax.persistence.EntityNotFoundException異常
- entityManager.find(Class<T> ModelObject.class , int key); <span style="color:#FF0000;">//參數一是實體類的class,參數二是實體主鍵對象
- (*關於find()與getReference()更詳細的介紹,可以查看<a target=_blank target="_blank" href="http://blog.sina.com.cn/s/blog_6e25da9b0101ct5g.html">點擊打開鏈接</a>)
- </span>
【4】remove():將對象從數據庫中刪除。
- 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()之後,對實體類所做的修改將會丟失。