新聞中心
本文向大家介紹Hibernate動(dòng)態(tài)模型(Dynamic models),可能好多人還不了解Hibernate動(dòng)態(tài)模型(Dynamic models),沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來(lái)公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過(guò)去的10年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如生料攪拌車等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過(guò)硬的技術(shù)實(shí)力獲得客戶的一致稱譽(yù)。
Hibernate動(dòng)態(tài)模型(Dynamic models)
注意:以下特性在當(dāng)前處于試驗(yàn)階段,將來(lái)可能會(huì)有變化。
運(yùn)行期的持久化實(shí)體沒(méi)有必要一定表示為像POJO類或JavaBean對(duì)象那樣的形式。Hibernate也支持動(dòng)態(tài)模型(在運(yùn)行期使用Map的Map)和象DOM4J的樹(shù)模型那樣的實(shí)體表示。使用這種方法,你不用寫(xiě)持久化類,只寫(xiě)映射文件就行了。
Hibernate默認(rèn)工作在普通POJO模式。你可以使用配置選項(xiàng)default_entity_mode, 對(duì)特定的SessionFactory,設(shè)置一個(gè)默認(rèn)的實(shí)體表示模式。 (參見(jiàn)表 3.3 “ Hibernate配置屬性 ”。)
下面是用Map來(lái)表示的例子。首先,在映射文件中,要聲明 entity-name來(lái)代替一個(gè)類名(或作為一種附屬)。
entity-name="Customer"> name="id" - type="long"
- column="ID">
class="sequence"/> name="name" - column="NAME"
- type="string"/>
name="address" - column="ADDRESS"
- type="string"/>
name="organization" - column="ORGANIZATION_ID"
- class="Organization"/>
name="orders" - inverse="true"
- lazy="false"
- cascade="all">
column="CUSTOMER_ID"/> class="Order"/>
注意:雖然是用目標(biāo)類名來(lái)聲明關(guān)聯(lián)的,但是關(guān)聯(lián)的目標(biāo)類型除了是POJO之外,也可以 是一個(gè)動(dòng)態(tài)的實(shí)體。
在使用dynamic-map為SessionFactory 設(shè)置了默認(rèn)的實(shí)體模式之后,可以在運(yùn)行期使用Map的 Map。
- Session s = openSession();
- Transaction tx = s.beginTransaction();
- Session s = openSession();
- // Create a customer
- Map david = new HashMap();
- david.put("name", "David");
- // Create an organization
- Map foobar = new HashMap();
- foobar.put("name", "Foobar Inc.");
- // Link both
- david.put("organization", foobar);
- // Save both
- s.save("Customer", david);
- s.save("Organization", foobar);
- tx.commit();
- s.close();
動(dòng)態(tài)映射的好處是,變化所需要的時(shí)間少了,因?yàn)樵筒恍枰獙?shí)現(xiàn)實(shí)體類。然而,你無(wú)法進(jìn)行 編譯期的類型檢查,并可能由此會(huì)處理很多的運(yùn)行期異常。幸虧有了Hibernate映射,它使得數(shù) 據(jù)庫(kù)的schema能容易的規(guī)格化和合理化,并允許稍后在此之上添加合適的領(lǐng)域模型實(shí)現(xiàn)。
實(shí)體表示模式也能在每個(gè)Session的基礎(chǔ)上設(shè)置:
- Session dynamicSession = pojoSession.getSession(EntityMode.MAP);
- // Create a customer
- Map david = new HashMap();
- david.put("name", "David");
- dynamicSession.save("Customer", david);
- ...
- dynamicSession.flush();
- dynamicSession.close()
- ...
- // Continue on pojoSession
請(qǐng)注意:用EntityMode調(diào)用getSession()是在 Session的API中,而不是SessionFactory。 這樣,新的Session共享底層的JDBC連接,事務(wù),和其他的上下文信 息。這意味著,你不需要在第二個(gè)Session中調(diào)用 flush()和close(),同樣的,把事務(wù)和連接的處理 交給原來(lái)的工作單元。
關(guān)于XML表示能力的更多信息在XML映射中找到,這里我們就不加以介紹了。
當(dāng)前標(biāo)題:Hibernate動(dòng)態(tài)模型(Dynamicmodels)詳解
網(wǎng)站鏈接:http://m.fisionsoft.com.cn/article/cciiiod.html


咨詢
建站咨詢
