欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

hibernate繼承映射2

系統(tǒng) 2205 0

?????????? 關(guān)于以前寫的hibernate繼承關(guān)系映射,當(dāng)30多張表的時(shí)候,系統(tǒng)開銷太大,導(dǎo)致了內(nèi)存溢出的嚴(yán)重問題,沒有辦法,只能換一種繼承策略了。

??????????? 就是30多張表的共用字段都提取出來,在數(shù)據(jù)庫里建一張表,其他表里只有自身的字段。然后在配置文件里面去繼承共用的那張表就OK了。其間,只是一些配置文件的細(xì)節(jié)發(fā)生了變化。程序代碼一點(diǎn)都不用改變!hibernate真強(qiáng)大啊!說多了沒用,上代碼!哦。。。先說說例子的大概情況:有一張職員表(這張表就是共用字段),一張小時(shí)工表(繼承職員表),一張薪水工表(也繼承職員表)。

(1)職員表

????

package ?mypack;

import ?java.io.Serializable;

public ? abstract ? class ?Employee? implements ?Serializable? ... {

????
private ?Long?id;
????
private ?String?name;
??????? private String type;
???
????生成get、set方法
}

?

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping
PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
< hibernate-mapping? >
???
< class? name ="mypack.Employee" ?table ="EMPLOYEES" ?polymorphism ="implicit" > ?
??????
< id? name ="id" ?type ="long" ?column ="ID" >
????????
< generator? class ="native" />
??????
</ id > ??
??????
< property? name ="name" ?type ="string" ?column ="NAME" ? />
???????? < property? name ="type" ?type ="string" ?column ="type" ?length="50" />
????
</ class >
</ hibernate-mapping >

?

(2)小時(shí)工表

???????

package ?mypack;

import ?java.io.Serializable;

public ? class ?HourlyEmployee? extends ?Employee ... {

????
private ? double ?rate;

???
/**?*/ /** ?default?constructor? */
????
public ?HourlyEmployee()? ... {
????}


????
public ? double ?getRate()? ... {
????????
return ? this .rate;
????}


????
public ? void ?setRate( double ?rate)? ... {
????????
this .rate? = ?rate;
????}


}

???????

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping
PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
< hibernate-mapping? >
??????
< joined-subclass? name ="mypack.HourlyEmployee" ?table ="HOURLY_EMPLOYEES" ??extends ="mypack.Employee" ? >
?????????
< key? column ="EMPLOYEE_ID" ? />
?????????
< property? name ="rate" ?column ="RATE" ?type ="double" ? />
??????
</ joined-subclass >
</ hibernate-mapping >

?

(3)薪水工表

?

package ?mypack;

import ?java.io.Serializable;

public ? class ?SalariedEmployee? extends ?Employee? ... {

????
private ? double ?salary;

????
/**?*/ /** ?default?constructor? */
????
public ?SalariedEmployee()? ... {
????}


???
public ? double ?getSalary()? ... {
????????
return ? this .salary;
????}


????
public ? void ?setSalary( double ?salary)? ... {
????????
this .salary? = ?salary;
????}


}

?????????

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping
PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
< hibernate-mapping? >
??????
< joined-subclass? name ="mypack.SalariedEmployee" ??table ="SALARIED_EMPLOYEES" ?extends ="mypack.Employee" ? >
?????????
< key? column ="EMPLOYEE_ID" ? />
?????????
< property? name ="salary" ?column ="SALARY" ?type ="double" ? />
??????
</ joined-subclass >
</ hibernate-mapping >

?

最后一步:注意了!把職員表重新命名再映射一遍,這回不是抽象的了。

package ?mypack;

import ?java.io.Serializable;

public ? class ?jEmployee? implements ?Serializable? ... {

????
private ?Long?id;
????
private ?String?name;
????
private ?String?type;
?
????
/**?*/ /** ?default?constructor? */
????
public ?jEmployee()? ... {
????}

???
????
// 生成get,set方法
}

?

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping
PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>
< hibernate-mapping? >
???
< class? name ="mypack.jEmployee" ?table ="EMPLOYEES" ? >
??????
< id? name ="id" ?type ="long" ?column ="ID" >
????????
< generator? class ="native" />
??????
</ id > ??
??????
< property? name ="name" ?type ="string" ?column ="NAME" ? />
??????
< property? name ="type" ?type ="string" ?column ="type" ??length ="50" />
????
</ class >
</ hibernate-mapping >

一會說,接著說。

???? 職位表中的type字段記錄著每個(gè)子表的表名。

??? 上面2,3的配置文件采用 joined-subclass,hiberntae中的繼承有3中,還有兩種,一個(gè)是 union-subclass和subclass。用union-subclass生成的sql語句都是以union形式的,用join-subclass生成的sql語句都是什么什么join。subclass這個(gè)方式太簡單了,不說了。

?? 為什么把職位表映射兩遍呢?而且最后一遍的映射是沒有繼承關(guān)系的單一文件,而且也不是抽象的。因?yàn)閔ibernate繼承映射的話,它會查出它子類的所有的東西,hibernate3.0是這樣的。假如說我程序里面想把所有共性的字段以列表的形式查出來,那么hibernate就會把它的子類都查出來,這樣開銷太大了。所以把員工表單獨(dú)映射一個(gè)純凈的類來解決這個(gè)開銷問題。

? 關(guān)于(1)中的配置文件中的polymorphism="implicit"屬性,有兩個(gè)值,即: implicit ( 隱式 )和 explicit(顯式)兩種。默認(rèn)是 implicit。很多人說,把這個(gè)屬性值設(shè)一下,這樣按著父類查詢是就不會把子類查出來,這是不對的,這種說法并沒有理解隱式和顯式的真正含義。他們的區(qū)別如下:

??? implicit(隱式)形式不使用join關(guān)鍵字。關(guān)聯(lián)使用"點(diǎn)號"來進(jìn)行“引用”。implicit join可以在任何HQL子句中出現(xiàn).implicit join在最終的SQL語句中以inner join的方式出現(xiàn)。

from Cat as cat where cat.mate.name like '%s%'

Implicit (隱式)的多態(tài)是指,如果查詢中給出的是任何超類、該類實(shí)現(xiàn)的接口或者該類的名字,都會返回這個(gè)類的實(shí)例;如果查詢中給出的是子類的名字,則會返回子類的實(shí)例。 Explicit (顯式)的多態(tài)是指,只有在查詢中給出的明確是該類的名字時(shí)才會返回這個(gè)類的實(shí)例;同時(shí)只有當(dāng)在這個(gè)<class>的定義中作為<subclass>或者<joined-subclass>出現(xiàn)的子類,才會可能返回。 大多數(shù)情況下,默認(rèn)的polymorphism="implicit"都是合適的。 顯式的多態(tài)在有兩個(gè)不同的類映射到同一個(gè)表的時(shí)候很有用。(允許一個(gè)“輕型”的類,只包含部分表字段)。

hibernate繼承映射2


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本高清免费zzzzzzzz | 欧美大胆一级视频 | 国产se| 日韩a在线看免费观看视频 五月天激情视频在线观看 成人97在线观看免费高清 | 在线播放一区二区三区 | 男女做www免费高清视频 | 国产精品夜夜春夜夜爽久久 | 欧美日韩色综合网站 | 欧美午夜影院 | 久久777国产线看观看精品 | 狠狠色噜噜狠狠狠97影音先锋 | 亚洲国产精品欧美综合 | 亚洲视频在线播放 | 国产一区二区在线免费观看 | 999精品嫩草久久久久久99 | 亚洲伊人网站 | 美女色站| 99爱在线视频这里只有精品 | 丁香狠狠| 国产乱码精品一区二区三区中文 | 国产精品国产成人国产三级 | 四虎欧美在线观看免费 | 春色www在线视频观看 | 色搞搞 | 国产精品美女一区二区三区 | 欧美日韩在线国产 | 欧美三级 在线播放 | 欧美激情欧美激情在线五月 | 日韩精选在线 | 狠狠插天天干 | 日本在线免费观看视频 | 国产精品一区二区三区免费 | 久久久99国产精品免费 | 国产精品美女久久久久aⅴ国产馆 | 九色福利 | 视频在线观看一区 | 99亚洲| 秋霞久久网 | 午夜免费| 最新欧美精品一区二区三区 | 涩色婷婷狠狠第四四房社区奇米 |