多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > JPA EntitManager進(jìn)階

JPA EntitManager進(jìn)階

來源:程序員人生   發(fā)布時間:2015-05-05 07:52:13 閱讀次數(shù):4299次

上篇我們簡單介紹了JPA EntityManager的基本操作,我們今天接著,更深1層次的介紹EntityManager


1級聯(lián)操作

2實體狀態(tài)

數(shù)據(jù)同步

級聯(lián)操作 

 1.1 持久化帶關(guān)系和實體

 上次,我們只是持久了1個客戶實體,如果創(chuàng)建客戶的時候,一樣持久化客戶所對應(yīng)的地址實體,如何操作呢?JPA中提供了多種持久化帶關(guān)系的實體

首先看以下客戶與地址的關(guān)系

 

代碼

Publicclass Customer implemets Serializable { //級聯(lián)持久化 @OneToOne(cascade = CascadeType.PERSIST) Private Address address; }

Cascade ,當(dāng)調(diào)用persist方法持久化客戶實體時

cascade = CascadeType.PERSIST,客戶所關(guān)聯(lián)的實體也自動時就化


  持久化客戶實體


customer.setAddress(address); em.persist(customer);

這樣,只需要持久化客戶實體,對應(yīng)固定實體也將自動持久化了,而不需要持久化兩次

 

實體屬性及加載方式

實體1旦通過find方法查詢后,實體的屬性可以有兩種方式加載,分別是 即時加載(EAGER)和惰性加載(LAZY,


fetch = FetchType.ELAZY懶加載

fetch = FetchType.EAGER即時加載


LAZY加載,只有當(dāng)使用該實體屬性時,才履行查詢的SQl,將屬性加載進(jìn)來,如果不顯示的調(diào)用,該屬性用于也不會加載到客戶實體中,而且當(dāng)該實體具有多條數(shù)據(jù),使用懶加載,容易造成頻繁訪問數(shù)據(jù)庫,出現(xiàn) N+1問題。若數(shù)據(jù)量少,該方式還是1個很好的選擇,若以1種方式?jīng)]有絕對的好或不好

 

1.2 更新實體關(guān)系


前面我們說道持久化帶關(guān)系的實體內(nèi)容時,了解到通過設(shè)置實體關(guān)系級聯(lián)屬性cascade可以調(diào)用persist方法自動持久化實體關(guān)系,一樣對更新實體鎖對應(yīng)關(guān)系,也是使用的。 merge方法同時更新實體對應(yīng)的關(guān)系實體

 

Publicclass Customer implemets Serializable { //級聯(lián)更新設(shè)置 @OneToOne(cascade = CascadeType.MERGE) Private Address address; }

此時客戶端可以通過首先查找客戶實體,通過getset方式對地址實體進(jìn)行修改,便可實現(xiàn)客戶地址的修正。

 

Cusetomer customer = cuseomerBean.findById("UUID"); customer.geteAddress.setZip("056000"); cuseomerBean.updateEntity(customer);

當(dāng)調(diào)用merge方法,實體管理器不但檢查客戶實體是不是修改i啊,也檢查鎖關(guān)聯(lián)的地址實體,若為瞬時態(tài),自動持久化,然后保存,若為托管,則更新到數(shù)據(jù)中。例如:新創(chuàng)建1個地址實體,也是可以持久化的

Cusetomer customer = cuseomerBean.findById("UUID"); Address address = new Address(); address.setZip("056000"); customer.setAddress(address); cuseomerBean.updateEntity(customer);

方法操作的背后還是要看現(xiàn)象的,不然理解起來不知所然呀


2 實體狀態(tài)

1個實體從創(chuàng)建到燒毀經(jīng)歷了多個狀態(tài),EntityManager是如果管理這些實體的,現(xiàn)在我們就揭開這個面紗吧

通常有這樣幾個狀態(tài) 瞬時態(tài)transient),托管managed)和燒毀(Removed),與Hibernate大相徑庭

 

 

舉例說明:

瞬時態(tài):對象未保存數(shù)據(jù)庫中,通過NEW對象,在內(nèi)存中,為持久化

持久態(tài):相對瞬時態(tài),調(diào)用persist,保存在數(shù)據(jù)庫

托管態(tài)(Managed):是由上下文(persistence Contexgts)管理,是實體處于上下文可被管理的范圍內(nèi)。

游離太:相對托管態(tài),實體不在上下文中時,處于游離態(tài),

   游離太情況:

  •  事務(wù)結(jié)束,實體超越作用域
  •  復(fù)制實體或序列化,實體處于游離態(tài)
  •   調(diào)用clear,是有實體都處于游離態(tài)

     燒毀態(tài)

 實體從數(shù)據(jù)庫中刪除后,處于燒毀狀態(tài),但必須是在托管狀態(tài)下刪除,否則拋出異常


3 數(shù)據(jù)同步

 或許你會認(rèn)為,當(dāng)調(diào)用persistmergemremove方法時,就已將實體保存到數(shù)據(jù)庫中,但事實其實不是這樣的,這些方法知識改變了實體所處的狀態(tài),終究保存到數(shù)據(jù)庫中,使用的是flush方法

什么時候使用該方法什么時候呢,這需要了解flush提交的方式,默許是

AUTO自動調(diào)教,實體管理器根據(jù)事務(wù)結(jié)束后,會調(diào)用flush方法,

設(shè)置模式是

 

Publicenum FLushModeType{ AUTO; COMMIT }


總結(jié):

認(rèn)識了實體管理器的級聯(lián)操作和生命周期管理后,對期有了基本的概念,同時對1些關(guān)系的設(shè)置也有了感官,整體上有了1個提升,JPA EntityManager高級

 

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 小说 都市 欧美 亚洲 | 一级做a爱久久久久久久 | 亚洲产国偷v产偷v自拍色戒 | 看一级毛片免费观看视频 | free性欧美另类高清 | 最近的中文字幕视频大全高清 | 印度videos又粗又大 | 亚洲人成亚洲人成在线观看 | 日韩国产欧美成人一区二区影院 | 亚洲 校园 欧美 动漫 制服 | 波多野结衣免费免费视频一区 | 国产 日韩 欧美 亚洲 | 一区二区三区国产 | 加勒比一本大道香蕉在线视频 | 伊人精品成人久久综合欧美 | 欧美洲久久日韩欧美 | 精品久久久中文字幕一区 | 日韩精品一区二区三区四区 | jizz亚洲日本jizz | 国产中日韩一区二区三区 | 国产欧美一区二区三区精品 | 国产一区二区视频在线播放 | 日本美女一级黄色片 | 波多野一区二区三区在线 | 日本一区二区在线不卡 | 在线播放人成午夜免费视频 | 日本不卡在线一区二区三区视频 | 色综合亚洲精品激情狠狠 | 精品欧美一区二区三区精品久久 | 99久久精品国产麻豆 | h亚洲| 手机看片国产欧美日韩高清 | 福利在线影院 | 好吊妞国产欧美日韩视频 | 中文字幕乱码中文 | 欧美高清另类video | 日韩福利在线视频 | 欧美激情一区二区三区四区 | 欧美黑人三级 | 日本欧美一区二区三区不卡视频 | 欧美成人网在线综合视频 |