成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate傳播性持久化攻略

開(kāi)發(fā) 后端
Hibernate默認(rèn)不實(shí)現(xiàn)所謂的可到達(dá)即Hibernate傳播性持久化(persistence by reachability)的策略。每個(gè)Hibernate session的基本操作都有對(duì)應(yīng)的級(jí)聯(lián)風(fēng)格(cascade style)。

本文向大家介紹Hibernate傳播性持久化(transitive persistence),可能好多人還不了解Hibernate傳播性持久化(transitive persistence),沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

對(duì)每一個(gè)對(duì)象都要執(zhí)行保存,刪除或重關(guān)聯(lián)操作讓人感覺(jué)有點(diǎn)麻煩,尤其是在處理許多彼此關(guān)聯(lián)的對(duì)象的時(shí)候。 一個(gè)常見(jiàn)的例子是父子關(guān)系。考慮下面的例子:

如果一個(gè)父子關(guān)系中的子對(duì)象是值類型(value typed)(例如,地址或字符串的集合)的,他們的生命周期會(huì)依賴于父對(duì)象,可以享受方便的級(jí)聯(lián)操作(Cascading),不需要額外的動(dòng)作。

父對(duì)象被保存時(shí),這些值類型(value typed)子對(duì)象也將被保存;父對(duì)象被刪除時(shí),子對(duì)象也將被刪除。 這對(duì)將一個(gè)子對(duì)象從集合中移除是同樣有效:Hibernate會(huì)檢測(cè)到,并且因?yàn)橹殿愋?value typed)的對(duì)象不可能被其他對(duì)象引用,所以Hibernate會(huì)在數(shù)據(jù)庫(kù)中刪除這個(gè)子對(duì)象。

現(xiàn)在考慮同樣的場(chǎng)景,不過(guò)父子對(duì)象都是實(shí)體(entities)類型,而非值類型(value typed)(例如,類別與個(gè)體,或母貓和小貓)。 實(shí)體有自己的生命期,允許共享對(duì)其的引用(因此從集合中移除一個(gè)實(shí)體,不意味著它可以被刪除), 并且實(shí)體到其他關(guān)聯(lián)實(shí)體之間默認(rèn)沒(méi)有級(jí)聯(lián)操作的設(shè)置。Hibernate默認(rèn)不實(shí)現(xiàn)所謂的可到達(dá)即Hibernate傳播性持久化(persistence by reachability)的策略。

每個(gè)Hibernate session的基本操作 - 包括 persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate() - 都有對(duì)應(yīng)的級(jí)聯(lián)風(fēng)格(cascade style)。 這些級(jí)聯(lián)風(fēng)格(cascade style)風(fēng)格分別命名為 create, merge, save-update, delete, lock, refresh, evict, replicate。 如果你希望一個(gè)操作被順著關(guān)聯(lián)關(guān)系級(jí)聯(lián)傳播,你必須在映射文件中指出這一點(diǎn)。例如:

  1. <one-to-one name="person" cascade="persist"/> 

級(jí)聯(lián)風(fēng)格(cascade style)是可組合的:

  1. <one-to-one name="person" cascade="persist,delete,lock"/> 

你可以使用cascade="all"來(lái)指定全部操作都順著關(guān)聯(lián)關(guān)系級(jí)聯(lián)(cascaded)。 默認(rèn)值是cascade="none",即任何操作都不會(huì)被級(jí)聯(lián)(cascaded)。

注意有一個(gè)特殊的級(jí)聯(lián)風(fēng)格(cascade style) delete-orphan,只應(yīng)用于one-to-many關(guān)聯(lián),表明delete()操作 應(yīng)該被應(yīng)用于所有從關(guān)聯(lián)中刪除的對(duì)象。

建議:

通常在關(guān)系中應(yīng)用級(jí)聯(lián)(cascade)沒(méi)什么意義。 級(jí)聯(lián)(cascade)通常在 關(guān)系中比較有用。

如果子對(duì)象的壽命限定在父親對(duì)象的壽命之內(nèi),可通過(guò)指定cascade="all,delete-orphan"將其變?yōu)樽詣?dòng)生命周期管理的對(duì)象(lifecycle object)。

其他情況,你可根本不需要級(jí)聯(lián)(cascade)。但是如果你認(rèn)為你會(huì)經(jīng)常在某個(gè)事務(wù)中同時(shí)用到父對(duì)象與子對(duì)象,并且你希望少打點(diǎn)兒字,可以考慮使用cascade="persist,merge,save-update"。

可以使用cascade="all"將一個(gè)關(guān)聯(lián)關(guān)系(無(wú)論是對(duì)值對(duì)象的關(guān)聯(lián),或者對(duì)一個(gè)集合的關(guān)聯(lián))標(biāo)記為父/子關(guān)系的關(guān)聯(lián)。 這樣對(duì)父對(duì)象進(jìn)行save/update/delete操作就會(huì)導(dǎo)致子對(duì)象也進(jìn)行save/update/delete操作。

此外,一個(gè)持久的父對(duì)象對(duì)子對(duì)象的淺引用(mere reference)會(huì)導(dǎo)致子對(duì)象被同步save/update。 不過(guò),這個(gè)隱喻(metaphor)的說(shuō)法并不完整。除非關(guān)聯(lián)是關(guān)聯(lián)并且被標(biāo)記為cascade="delete-orphan", 否則父對(duì)象失去對(duì)某個(gè)子對(duì)象的引用不會(huì)導(dǎo)致該子對(duì)象被自動(dòng)刪除。 父子關(guān)系的級(jí)聯(lián)(cascading)操作準(zhǔn)確語(yǔ)義如下:

如果父對(duì)象被persist(),那么所有子對(duì)象也會(huì)被persist()

如果父對(duì)象被merge(),那么所有子對(duì)象也會(huì)被merge()

如果父對(duì)象被save(),update()或 saveOrUpdate(),那么所有子對(duì)象則會(huì)被saveOrUpdate()

如果某個(gè)持久的父對(duì)象引用了瞬時(shí)(transient)或者脫管(detached)的子對(duì)象,那么子對(duì)象將會(huì)被saveOrUpdate()

如果父對(duì)象被刪除,那么所有子對(duì)象也會(huì)被delete()

除非被標(biāo)記為cascade="delete-orphan"(刪除“孤兒”模式,此時(shí)不被任何一個(gè)父對(duì)象引用的子對(duì)象會(huì)被刪除), 否則子對(duì)象失掉父對(duì)象對(duì)其的引用時(shí),什么事也不會(huì)發(fā)生。 如果有特殊需要,應(yīng)用程序可通過(guò)顯式調(diào)用delete()刪除子對(duì)象。

***,注意操作的級(jí)聯(lián)可能是在調(diào)用期(call time)或者寫入期(flush time)作用到對(duì)象圖上的。所有的操作,如果允許,都在操作被執(zhí)行的時(shí)候級(jí)聯(lián)到可觸及的關(guān)聯(lián)實(shí)體上。然而,save-upate和delete-orphan是在Session flush的時(shí)候才作用到所有可觸及的被關(guān)聯(lián)對(duì)象上的。

本文只是大概的說(shuō)明了Hibernate傳播性持久化的應(yīng)用,可能還有不足的地方,讀者可以查更多的書去了解。

【編輯推薦】

  1. Hibernate中Criteria攻略詳解
  2. 簡(jiǎn)述Hibernate三種查詢的應(yīng)用
  3. 談?wù)凥ibernate為何是Java開(kāi)源項(xiàng)目
  4. 淺析為何學(xué)習(xí)Hibernate
  5. 淺析Hibernate VO與PO區(qū)別
責(zé)任編輯:仲衡 來(lái)源: javanb
相關(guān)推薦

2009-09-27 09:55:38

Hibernate持久

2009-09-24 15:42:44

Hibernate對(duì)象

2009-09-29 16:46:01

創(chuàng)建Hibernate

2009-09-28 15:50:53

Hibernate創(chuàng)建持久化Product

2009-09-25 17:19:28

Hibernate持久

2009-09-29 16:11:45

Hibernate實(shí)現(xiàn)

2009-09-25 09:30:33

Hibernate持久

2009-09-23 15:25:08

Hibernate 3

2009-06-17 16:00:03

Hibernate自定

2009-09-23 17:00:07

Hibernate持久

2009-09-21 17:46:34

Hibernate持久

2009-09-29 10:37:29

Hibernate持久

2009-09-29 10:57:25

設(shè)置Hibernate

2009-09-24 13:03:38

Hibernate C

2009-09-24 14:12:22

Hibernate數(shù)據(jù)

2013-07-09 10:18:58

VDI虛擬化

2009-06-18 15:24:35

Hibernate二級(jí)

2023-07-07 08:16:53

Redis持久化

2021-05-25 10:20:31

Python持久性編程語(yǔ)言

2013-09-12 14:56:02

iOS持久化
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产精品18hdxxxⅹ在线 | 一区二区三区四区不卡 | 精品国产一级片 | 久久小视频 | 久久一区二区三区四区五区 | 伊人网国产 | 伊人网国产 | 久久婷婷香蕉热狠狠综合 | 国产综合精品 | 中文字幕第三页 | 欧美一区二区三区 | 久久九九色 | 正在播放一区二区 | gav成人免费播放视频 | 一区二区在线免费观看 | 国产区在线 | 在线看91 | 成人精品久久 | 国产美女在线看 | 日韩欧美操 | 日日干日日操 | 最新中文字幕在线播放 | 午夜精品久久久久久 | 日韩精品在线网站 | 国产精品久久av | 欧美亚洲成人网 | 日本欧美在线 | 欧美一区2区三区3区公司 | 国产一区二区久久 | 亚洲国产一区二区三区在线观看 | 福利电影在线 | 一区二区三区在线 | 国产欧美日韩二区 | 国产中文字幕在线 | 91av视频在线播放 | 天堂在线免费视频 | 国产免费又黄又爽又刺激蜜月al | 91精品久久久久久久久久入口 | 久久久性 | 精品美女久久久久久免费 | 亚洲一区在线日韩在线深爱 |