自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JPA的實(shí)體狀態(tài)和API淺析

開發(fā) 后端
本文分析JPA中的實(shí)體狀態(tài)的4個(gè)狀態(tài)及相關(guān)API的使用。

實(shí)體對象擁有以下4個(gè)狀態(tài),這些狀態(tài)通過調(diào)用EntityManager接口方法發(fā)生遷移:

新建態(tài):新創(chuàng)建的實(shí)體對象,尚未擁有持久化主鍵,沒有和一個(gè)持久化上下文關(guān)聯(lián)起來。受控態(tài):已經(jīng)擁有持久化主鍵并和持久化上下文建立了聯(lián)系; 游離態(tài):擁有持久化主鍵,但尚未和持久化上下文建立聯(lián)系; 刪除態(tài):擁有持久化主鍵,已經(jīng)和持久化上下文建立聯(lián)系,但已經(jīng)被安排從數(shù)據(jù)庫中刪除。

EntityManager 的API

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

void persist(Object entity)

通過調(diào)用EntityManager的persist()方法,新實(shí)體實(shí)例將轉(zhuǎn)換為受控狀態(tài)。這意謂著當(dāng)persist ()方法所在的事務(wù)提交時(shí),實(shí)體的數(shù)據(jù)將保存到數(shù)據(jù)庫中。如果實(shí)體已經(jīng)被持久化,那么調(diào)用persist()操作不會(huì)發(fā)生任何事情。如果對一個(gè)已經(jīng)刪除的 實(shí)體調(diào)用persist()操作,刪除態(tài)的實(shí)體又轉(zhuǎn)變?yōu)槭芸貞B(tài)。如果對游離狀的實(shí)體執(zhí)行persist()操作,將拋出 IllegalArgumentException。

在一個(gè)實(shí)體上調(diào)用persist()操作,將廣播到和實(shí)體關(guān)聯(lián)的實(shí)體上,執(zhí)行相應(yīng)的級聯(lián)持久化操作;

void remove(Object entity)

通過調(diào)用remove()方法刪除一個(gè)受控的實(shí)體。如果實(shí)體聲明為級聯(lián)刪除(cascade=REMOVE 或者cascade=ALL ),被關(guān)聯(lián)的實(shí)體也會(huì)被刪除。在一個(gè)新建狀態(tài)的實(shí)體上調(diào)用remove()操作,將被忽略。如果在游離實(shí)體上調(diào)用remove()操作,將拋出 IllegalArgumentException,相關(guān)的事務(wù)將回滾。如果在已經(jīng)刪除的實(shí)體上執(zhí)行remove()操作,也會(huì)被忽略;

void flush()

將受控態(tài)的實(shí)體數(shù)據(jù)同步到數(shù)據(jù)庫中;

T merge(T entity)

將一個(gè)游離態(tài)的實(shí)體持久化到數(shù)據(jù)庫中,并轉(zhuǎn)換為受控態(tài)的實(shí)體;

T find(Class entityClass, Object primaryKey)

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

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

Query createQuery(String qlString)

根據(jù)JPA的查詢語句創(chuàng)建一個(gè)查詢對象Query,如下面的代碼:

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

使用本地?cái)?shù)據(jù)庫的SQL語句創(chuàng)建一個(gè)Query對象,Query通過getResultList()方法執(zhí)行查詢后,返回一個(gè)List結(jié)果集,每一行數(shù)據(jù)對應(yīng)一個(gè)Vector。

Query

JPA使用javax.persistence.Query接口代表一個(gè)查詢實(shí)例,Query實(shí)例由EntityManager通過指定查詢語句構(gòu)建。該接口擁有眾多執(zhí)行數(shù)據(jù)查詢的接口方法:

Object getSingleResult():執(zhí)行SELECT查詢語句,并返回一個(gè)結(jié)果;

List getResultList() :執(zhí)行SELECT查詢語句,并返回多個(gè)結(jié)果;

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

Query setMaxResults(int maxResult):設(shè)置返回的最大結(jié)果數(shù);

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

您正在閱讀:JPA的實(shí)體狀態(tài)和API淺析

【編輯推薦】

  1. Java Persistence API (JPA) 的陷阱
  2. 持久化規(guī)范JPA(JavapersistenceAPI)
  3. 9.3 從特定的API到混搭
責(zé)任編輯:張攀 來源: 百度空間
相關(guān)推薦

2009-06-25 16:18:45

JPA規(guī)范

2009-06-01 15:19:25

JPAHibenateSpring

2009-11-12 15:00:03

ADO.NET實(shí)體數(shù)據(jù)

2009-06-01 14:54:50

jpaapiJava

2009-06-25 16:07:30

JPAJava EE

2022-11-24 13:17:43

2009-09-10 10:09:46

LINQ to SQL

2009-07-08 10:02:41

Servlet 3.0

2018-01-04 15:50:44

深度學(xué)習(xí)自然語言機(jī)器學(xué)習(xí)

2009-07-22 15:21:00

iBATIS SQLM

2009-09-28 09:35:10

Hibernate實(shí)現(xiàn)實(shí)體對象延遲加載

2009-06-01 15:12:05

JPA是什么對象持久化ORM

2009-06-01 15:44:18

2023-01-04 08:53:52

JPA實(shí)體類注解

2009-09-18 13:28:41

Mobile Sens

2009-07-22 09:07:01

iBATIS.NET

2009-08-10 14:48:39

ASP.NET組件設(shè)計(jì)

2009-11-13 09:24:58

JPA 2.0Criteria AP

2022-03-07 15:22:16

classHarmony鴻蒙

2011-04-01 15:49:13

路由器鏈路
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號