歡迎您光臨本站 註冊首頁

JPA的實體狀態和API淺析

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

實體對象擁有以下4個狀態,這些狀態通過調用EntityManager介面方法發生遷移:

新建態:新創建的實體對象,尚未擁有持久化主鍵,沒有和一個持久化上下文關聯起來.受控態:已經擁有持久化主鍵並和持久化上下文建立了聯繫;

遊離態:擁有持久化主鍵,但尚未和持久化上下文建立聯繫; 刪除態:擁有持久化主鍵,已經和持久化上下文建立聯繫,但已經被安排從資料庫中刪除.

EntityManager 的API

下面是EntityManager的一些主要的介面方法:

void persist(Object entity)

通過調用EntityManager的persist()方法,新實體實例將轉換為受控狀態.這意謂著當persist ()方法所在的事務提交時,實體的數據將保存到資料庫中.如果實體已經被持久化,那麼調用persist()操作不會發生任何事情.如果對一個已經刪除的 實體調用persist()操作,刪除態的實體又轉變為受控態.如果對遊離狀的實體執行persist()操作,將拋出 IllegalArgumentException.

在一個實體上調用persist()操作,將廣播到和實體關聯的實體上,執行相應的級聯持久化操作;

void remove(Object entity)

通過調用remove()方法刪除一個受控的實體.如果實體聲明為級聯刪除(cascade=REMOVE 或者cascade=ALL ),被關聯的實體也會被刪除.在一個新建狀態的實體上調用remove()操作,將被忽略.如果在遊離實體上調用remove()操作,將拋出 IllegalArgumentException,相關的事務將回滾.如果在已經刪除的實體上執行remove()操作,也會被忽略;

void flush()

將受控態的實體數據同步到資料庫中;

T merge(T entity)

將一個遊離態的實體持久化到資料庫中,並轉換為受控態的實體;

T find(Class entityClass, Object primaryKey)

以主鍵查詢實體對象,entityClass是實體的類,primaryKey是主鍵值,如以下的代碼查詢Topic實體:

Topic t = em.find(Topic.class,1);

Query createQuery(String qlString)

根據JPA的查詢語句創建一個查詢對象Query,如下面的代碼:

Query q= em.createQuery(""SELECT t FROM Topic t
WHERE t.topicTitle LIKE :topicTitle")");
Query createNativeQuery(String sqlString)

使用本地資料庫的SQL語句創建一個Query對象,Query通過getResultList()方法執行查詢后,返回一個List結果集,每一行數據對應一個Vector.

Query

JPA使用javax.persistence.Query介面代表一個查詢實例,Query實例由EntityManager通過指定查詢語句構建.該介面擁有眾多執行數據查詢的介面方法:

Object getSingleResult():執行SELECT查詢語句,並返回一個結果;

List getResultList() :執行SELECT查詢語句,並返回多個結果;

Query setParameter(int position, Object value):通過參數位置號綁定查詢語句中的參數,如果查詢語句使用了命令參數,則可以使用Query setParameter(String name, Object value)方法綁定命名參數;

Query setMaxResults(int maxResult):設置返回的最大結果數;

int executeUpdate():如果查詢語句是新增、刪除或更改的語句,通過該方法執行更新操作.


[火星人 ] JPA的實體狀態和API淺析已經有553次圍觀

http://coctec.com/docs/java/show-post-61564.html