新聞中心
Hibernate對(duì)象持久化技術(shù)如何實(shí)現(xiàn)呢?本文將教你如何更簡(jiǎn)單更加快速的學(xué)會(huì)Hibernate對(duì)象持久化技術(shù)。

創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10年來致力于為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了上1000+網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
Hibernate對(duì)象持久化類(persistent class)新實(shí)例化的對(duì)象是瞬時(shí)(Transient)的。 我們可通過將瞬時(shí)(Transient)對(duì)象與session關(guān)聯(lián)而把它變?yōu)槌志?Persistent)的。
- DomesticCat fritz = new DomesticCat();
- fritz.setColor(Color.GINGER);
- fritz.setSex('M');
- fritz.setName("Fritz");
- Long generatedId = (Long) sess.save(fritz);
如果Cat的持久化標(biāo)識(shí)(identifier)是generated類型的, 那么該標(biāo)識(shí)(identifier)會(huì)自動(dòng)在save()被調(diào)用時(shí)產(chǎn)生并分配給cat。 如果Cat的持久化標(biāo)識(shí)(identifier)是assigned類型的,或是一個(gè)復(fù)合主鍵(composite key), 那么該標(biāo)識(shí)(identifier)應(yīng)當(dāng)在調(diào)用save()之前手動(dòng)賦予給cat。 你也可以按照EJB3 early draft中定義的語(yǔ)義,使用persist()替代save()。
此外,你可以用一個(gè)重載版本的save()方法。
- DomesticCat pk = new DomesticCat();
- pk.setColor(Color.TABBY);
- pk.setSex('F');
- pk.setName("PK");
- pk.setKittens( new HashSet() );
- pk.addKitten(fritz);
- sess.save( pk, new Long(1234) );
如果你持久化的對(duì)象有關(guān)聯(lián)的對(duì)象(associated objects)(例如上例中的kittens集合) 那么對(duì)這些對(duì)象(譯注:pk和kittens)進(jìn)行持久化的順序是任意的(也就是說可以先對(duì)kittens進(jìn)行持久化也可以先對(duì)pk進(jìn)行持久化), 除非你在外鍵列上有NOT NULL約束。 Hibernate不會(huì)違反外鍵約束,但是如果你用錯(cuò)誤的順序持久化對(duì)象(譯注:在pk持久化之前持久化kitten),那么可能會(huì)違反NOT NULL約束。
通常你不會(huì)為這些細(xì)節(jié)煩心,因?yàn)槟愫芸赡軙?huì)使用傳播性Hibernate對(duì)象持久化(transitive persistence)功能自動(dòng)保存相關(guān)聯(lián)那些對(duì)象。 這樣連違反NOT NULL約束的情況都不會(huì)出現(xiàn)了 - Hibernate會(huì)管好所有的事情。 傳播性持久化(transitive persistence)將在本章稍后討論。
分享文章:簡(jiǎn)單學(xué)會(huì)Hibernate對(duì)象持久化
網(wǎng)址分享:http://www.dlmjj.cn/article/cdgehse.html


咨詢
建站咨詢
