程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JPA的實體狀態和API淺析

JPA的實體狀態和API淺析

編輯:關於JAVA

實體對象擁有以下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():如果查詢語句是新增、刪除或更改的語句,通過該方法執行更新操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved