freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

hibernate持久化數(shù)據(jù)庫第二天-資料下載頁

2024-12-07 21:58本頁面
  

【正文】 (也叫 ” 托管 ” )( Persist): – id 不為 null – 位于 Session 緩存中 – 持久化對(duì)象和數(shù)據(jù)庫中的相關(guān)記錄對(duì)應(yīng) – Session 在清理緩存時(shí) , 會(huì)根據(jù)持久化對(duì)象的屬性變化 , 來同步更新數(shù)據(jù)庫 – 在同一個(gè) Session 實(shí)例的緩存中 , 數(shù)據(jù)庫表中的每條記錄只對(duì)應(yīng)唯一的持久化對(duì)象 操縱持久化對(duì)象狀態(tài) 知識(shí)點(diǎn) 8:游離對(duì)象 (也叫 ” 脫管 ” )(Detached) – id 不為 null – 不再處于 Session 的緩存中 – 一般情況需下 , 游離對(duì)象是由持久化對(duì)象轉(zhuǎn)變過來的 , 因此在數(shù)據(jù)庫中可能還存在與它對(duì)應(yīng)的記錄 操縱持久化對(duì)象 程序代碼 生命周期 狀態(tài) tx = ()。 Customer c = new Customer)。 開始生命周期 臨時(shí)狀態(tài) (c) 處于生命周期中 轉(zhuǎn)變?yōu)槌志没癄顟B(tài) Long id=()。 c = null。 Customer r2 = (Customer)(,id)。 ()。 處于生命周期中 處于持久化狀態(tài) ()。 處于生命周期中 轉(zhuǎn)變?yōu)橛坞x態(tài) ()。 處于生命周期中 處于游離態(tài) r2 = null。 結(jié)束生命周期 結(jié)束生命周期 知識(shí)點(diǎn) 9:測(cè)試 hibernate中 java對(duì)象的狀態(tài) 知識(shí)點(diǎn) 10:對(duì)象的狀態(tài)轉(zhuǎn)換圖 臨時(shí)狀態(tài) 持久化狀態(tài) 游離狀態(tài) 刪除狀態(tài) new 語句 get() Load() () () () save() saveOrUpdate() evict() close() clear() update() saveOrUpdate() lock() delete() delete() 垃圾回收 垃圾回收 垃圾回收 知識(shí)點(diǎn) 11:對(duì)象的狀態(tài)總結(jié) Session緩存存在對(duì)應(yīng)的記錄 數(shù)據(jù)中存在對(duì)應(yīng)的記錄 臨時(shí)態(tài) no no 持久態(tài) yes 可能有也可能沒有 游離態(tài) no 可能有 (數(shù)據(jù)沒有刪除 )也可能沒有 Customer c=new Customer()。 (c)。//持久對(duì)象 ,但數(shù)據(jù)庫中沒有 操縱持久化對(duì)象的方法 ? Session 的 save() 方法使一個(gè)臨時(shí)對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象 ? Session 的 save() 方法完成以下操作 : – 把 News 對(duì)象加入到 Session 緩存中 , 使它進(jìn)入持久化狀態(tài) – 選用映射文件指定的標(biāo)識(shí)符生成器 , 為持久化對(duì)象分配唯一的 id. 在使用代理主鍵的情況下 , setId() 方法為 News 對(duì)象設(shè)置 id 使無效的 . – 計(jì)劃執(zhí)行一條 insert 語句 ,把 Customer對(duì)象當(dāng)前的屬性值組裝到 insert語句中 ? Hibernate 通過持久化對(duì)象的 id 來維持它和數(shù)據(jù)庫相關(guān)記錄的對(duì)應(yīng)關(guān)系 . 當(dāng) News 對(duì)象處于持久化狀態(tài)時(shí) , 不允許程序隨意修改它的 ID 知識(shí)點(diǎn) 12: 操縱持久化對(duì)象 save() 操縱持久化對(duì)象的方法 ? Session 的 update() 方法使一個(gè)游離對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象 , 并且計(jì)劃執(zhí)行一條 update 語句 . 知識(shí)點(diǎn) 13_1: 操縱持久化對(duì)象 update() 操縱持久化對(duì)象的方法 ? 若希望 Session 僅當(dāng)修改了 News 對(duì)象的屬性時(shí) , 才執(zhí)行 update() 語句 , 可以把映射文件中 class 元素的 selectbeforeupdate(更新之前先查詢 ) 設(shè)為 true. 該屬性的默認(rèn)值為 false 知識(shí)點(diǎn) 13_2: 操縱持久化對(duì)象 update() 操縱持久化對(duì)象的方法 ? 當(dāng) update() 方法關(guān)聯(lián)一個(gè)游離對(duì)象時(shí) , 如果在 Session 的緩存中已經(jīng)存在相同 id 的持久化對(duì)象 , 會(huì)拋出異常 知識(shí)點(diǎn) 13_3: 操縱持久化對(duì)象 update() 原因是 :兩個(gè)不同的對(duì)象擁有相同的 id 操縱持久化對(duì)象的方法 ? 當(dāng) update() 方法關(guān)聯(lián)一個(gè)游離對(duì)象時(shí) , 如果在數(shù)據(jù)庫中不存在相應(yīng)的記錄 , 也會(huì)拋出異常 . 知識(shí)點(diǎn) 13_4: 操縱持久化對(duì)象 update() 操縱持久化對(duì)象的方法 saveOrUpdate: 該方法同時(shí)包含 save和 update方法,如果參數(shù)是臨時(shí)對(duì)象就用 save方 法,如果是游離對(duì)象就用 update方法,如果是持久化對(duì)象就直接返回。 ? 判定對(duì)象為臨時(shí)對(duì)象的標(biāo)準(zhǔn) – Java 對(duì)象的 id 為 null – 映射文件中為 id 設(shè)置了 unsavedvalue 屬性 , 并且 Java 對(duì)象的 id 取值與這個(gè) unsavedvalue 屬性值匹配 知識(shí)點(diǎn) 14_1: 操縱持久化對(duì)象 saveOrupdate() 操縱持久化對(duì)象的方法 知識(shí)點(diǎn) 14_2: 操縱持久化對(duì)象 saveOrupdate() 如果參數(shù)是臨時(shí)對(duì)象就用 save方法 操縱持久化對(duì)象的方法 知識(shí)點(diǎn) 14_3: 操縱持久化對(duì)象 saveOrupdate() 如果是游離對(duì)象就用 update方法 操縱持久化對(duì)象的方法 知識(shí)點(diǎn) 14_4: 操縱持久化對(duì)象 saveOrupdate() 如果是持久化對(duì)象就直接返回 ,不執(zhí)行操作 操縱持久化對(duì)象的方法 知識(shí)點(diǎn) 14_5: 操縱持久化對(duì)象 saveOrupdate() ? 判定對(duì)象為臨時(shí)對(duì)象的標(biāo)準(zhǔn) – Java 對(duì)象的 id 為 null – 映射文件中為 id 設(shè)置了 unsavedvalue 屬性 , 并且 Java 對(duì)象的 id 取值與這個(gè) unsavedvalue 屬性值匹配 ,執(zhí)行插入操作 根據(jù)以上判斷臨時(shí)對(duì)象的標(biāo)準(zhǔn) id=null是臨時(shí)對(duì)象。但可以定義屬性為 int id * 此時(shí) id默認(rèn)值是 0而不是 null,應(yīng)該執(zhí)行更新操作 * 但實(shí)際我們要執(zhí)行的插入操作。這時(shí) ,可以在 id中設(shè)置 unsavedvalue=0(默認(rèn)值 ) 操縱持久化對(duì)象的方法 ? 都可以根據(jù)給定的 id 從數(shù)據(jù)庫中加載一個(gè)持久化對(duì)象 ? 區(qū)別 : – 當(dāng)數(shù)據(jù)庫中不存在與 id 對(duì)應(yīng)的記錄時(shí) , load() 方法拋出 ObjectNotFoundException 異常 , 而 get() 方法返回 null – 兩者采用不同的延遲檢索策略 知識(shí)點(diǎn) 15: 操縱持久化對(duì)象 get() load() 操縱持久化對(duì)象的方法 Session 的 delete() 方法既可以刪除一個(gè)游離對(duì)象 , 也 可以刪除一個(gè)持久化對(duì)象 – 如果參數(shù)是持久化對(duì)象,就執(zhí)行一個(gè) delete語句,若為游離對(duì)象,先使游離對(duì)象被 session關(guān)聯(lián),使他變?yōu)槌志没瘜?duì)象 – 計(jì)劃執(zhí)行一條 delete 語句 – 把對(duì)象從 Session 緩存中刪除 , 該對(duì)象進(jìn)入刪除狀態(tài) . 知識(shí)點(diǎn) 16: 操縱持久化對(duì)象 delete 操縱持久化對(duì)象 知識(shí)點(diǎn) 17:與觸發(fā)器協(xié)同工作 (c)。 ()。 (c)。 觸發(fā)器的行為導(dǎo)致緩存與數(shù)據(jù)庫中的數(shù)據(jù)不一致。解決辦法是執(zhí)行完 操作后,立即調(diào)用 session的 flush方法和 refresh方法,迫使緩存與 數(shù)據(jù)庫同步。 Session的 update操作方法盲目的激活觸發(fā)器 如果游離狀態(tài)的對(duì)象的屬性和數(shù)據(jù)庫一致,則更新操作是多余的。 為避免這種情況: class name=“” table=“” selectbeforeupdate=“true” …… /class 知識(shí)點(diǎn)五:映射一對(duì)一 多對(duì)多關(guān)聯(lián)關(guān)系 映射一對(duì)一外鍵雙向關(guān)聯(lián) ? 一對(duì)一關(guān)聯(lián)指兩個(gè)表之間的記錄是一一對(duì)應(yīng)的關(guān)系。分為兩種:外鍵關(guān)聯(lián)和主鍵關(guān)聯(lián)。 ? 比如一家公司 (Company)和它所在的地址 (Address)。在業(yè)務(wù)邏輯中要求一家公司只有唯一的地址,一個(gè)地址也只有一家公司。 下圖表現(xiàn)為外鍵關(guān)聯(lián)關(guān)系。 fk pk 唯一 映射一對(duì)一外鍵雙向關(guān)聯(lián) ? 對(duì)于基于外鍵的 11關(guān)聯(lián),其外鍵可以存放在任意一邊, 在需要存放外鍵一端,增加 manytoone 元素 。為 manytoone元素增加 unique=“true” 屬性來表示為 11關(guān)聯(lián),并用 name屬性來指定關(guān)聯(lián)屬性的屬性名 ? 另一端需要使用 onetoone元素,該元素使用 propertyref(可以不加 ) 屬性指定使用被關(guān)聯(lián)實(shí)體主鍵以外的字段作為關(guān)聯(lián)字段 映射一對(duì)一外鍵雙向關(guān)聯(lián) 映射一對(duì)一外鍵雙向關(guān)聯(lián) public vid insert(){ Session session=()。 Transaction tx=()。 Company pany=new Company()。 (bochy)。 Address address=new Address()。 (北京 )。 (中國 )。 (address)。 (pany)。 (address)。 (pany)。 ()。 ()。 } 知識(shí)點(diǎn) 1:測(cè)試保存 映射一對(duì)一外鍵雙向關(guān)聯(lián) public vid insertUnique(){ Session session=()。 Transaction tx=()。 //創(chuàng)建公司 Company pany=new Company()。 (cctv)。 //查詢地址 Address address=(Address)(, 1)。 //建立雙向關(guān)聯(lián) (address)。 (pany)。 //保存公司 (pany)。 ()。 ()。 } 知識(shí)點(diǎn) 2:測(cè)試唯一性 映射一對(duì)一主鍵雙向關(guān)聯(lián) ? 一對(duì)一的另一種解決方式就是主鍵關(guān)聯(lián),在這種關(guān)聯(lián)關(guān)系中,要求兩個(gè)對(duì)象的主鍵必須保持一致,通過兩個(gè)表的主鍵建立關(guān)聯(lián)關(guān)系,無須外鍵參與。 映射一對(duì)一主鍵雙向關(guān)聯(lián) ? 基于主鍵的映射策略 :指一端的主鍵生成器使用 foreign 策略 ,表明根據(jù) ” 對(duì)方 ” 的主鍵來生成自己的主鍵,自己并不能獨(dú)立生成主鍵 . param 子元素指定使用當(dāng)前持久化類的哪個(gè)屬性作為 “ 對(duì)方 ” ? 采用 foreign主鍵生成器策略的一端增加 onetoone 元素映射關(guān)聯(lián)屬性,其 onetoone 屬性還應(yīng)增加 constrained=“true” 屬性;另一端 (pany)增加 onetoone元素映射關(guān)聯(lián)屬性。 ? constrained(約束 ):指定為當(dāng)前持久化類對(duì)應(yīng)的數(shù)據(jù)庫表的主鍵添加一個(gè)外鍵約束,引用被關(guān)聯(lián)的對(duì)象 (“對(duì)方 ” )所對(duì)應(yīng)的數(shù)據(jù)庫表主鍵 映射一對(duì)一主鍵雙向關(guān)聯(lián) 映射一對(duì)一主鍵雙向關(guān)聯(lián) public vid insert(){ Session session=()。 Transaction tx=()。 Company pany=new Company()。 (bochy)。 Address address=new Address()。 (北京 )。 (中國 )。 (address)。 (pany)。 (address)。 (pany)。 ()。 ()。 } 知識(shí)點(diǎn) 3:測(cè)試保存 映射多對(duì)多雙向關(guān)聯(lián)關(guān)系 多對(duì)多的實(shí)體關(guān)系模型也是很常見的 , 比如用戶和角色的關(guān)系 。 一個(gè)用戶可以選修多門角色 , 一個(gè)角色可以被多名用戶選修 。 在關(guān)系型數(shù)據(jù)庫中對(duì)于多對(duì)多關(guān)聯(lián)關(guān)系的處理一般采用中間表的形式 , 將多對(duì)多的關(guān)系轉(zhuǎn)化成兩個(gè)一對(duì)多的關(guān)系 。 映射多對(duì)多雙向關(guān)聯(lián)關(guān)系 ? 雙向 nn 關(guān)聯(lián)需要兩端都使用集合屬性 ? 雙向 nn關(guān)聯(lián)必須使用中間表 ? 集合屬性應(yīng)增加 key 子元素用以映射外鍵列 , 集合元素里還應(yīng)增加 manytomany子元素關(guān)聯(lián)實(shí)體類 ? 在雙向 nn 關(guān)聯(lián)的兩邊都需指定連接表的表名及外鍵列的列名 . 兩個(gè)集合元素 set 的 table 元素的值必須指定,而且必須相同。 映射多對(duì)多雙向關(guān)聯(lián)關(guān)系 ? set元素的兩個(gè)子元素: key 和 manytomany 都必須指定 column 屬性, ? 其中, key 和 manytomany 分別指定 本持久化類 和 關(guān)聯(lián)類 在連接表中的外鍵列名, ? 因此兩邊的 key 與 manytomany 的 column屬性交叉相同。也就是說,一邊的 set元素的 key的 cloumn值為a,manytomany 的 column 為 b;則另一邊的 set 元素的 key 的 column 值 b,manytomany的 column 值為
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1