日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(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ù):4307次

上篇我們簡單介紹了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ìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久99精品久久久久久青青日本 | 五月天婷婷社区 | 日本精品在线视频 | 激情在线视频网站 | 91麻豆精品国产91久久久久久久久 | 日韩视频免费观看 | 91福利网 | 中文字幕国产日韩 | 精品一级 | 国产一区二区三区日韩 | 欧美经典一区 | 九九热视频在线 | 国产区视频在线 | 国产一区二区三区观看 | 国产精品二区一区二区aⅴ污介绍 | 一区二区三区精品 | www日韩视频| 国产成人精品久久二区二区91 | 色偷偷8888欧美精品久久 | 成人性生交大片免费看在线播放 | 国产激情二区 | 美女视频一区二区三区 | 在线观看av片 | 色婷婷国产精品免费网站 | 久久成人免费 | 国产伦精品一区二区三区高清版 | 精品久久久久久久久久久久久久 | 肉色欧美久久久久久久免费看 | 尤物在线观看 | 国产精品久久久久久久久久免费 | 国产二区久久 | 午夜精品久久久久 | 草久在线观看视频 | 黄网站免费在线观看 | 国产一二区 | 日本视频网| 欧美在线视频一区 | 日韩欧美在线观看视频网站 | 午夜日韩视频 | av第下页| 99国产精品久久久久久久成人热 |