欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 成人国产精品色哟哟 | 青娱乐欧美 | 清清草免费视频 | 青青草成人免费视频在线 | 日韩欧美精品在线 | 免费一级毛片不卡不收费 | 亚洲人视频| 国产99久久精品一区二区 | 精品伊人久久久大香线蕉欧美 | 国产精品三级a三级三级午夜 | 亚洲香蕉久久一区二区三区四区 | 中文字幕精品一区二区三区精品 | 毛片大全免费 | 色噜噜影院| 久久人人爱 | 日本欧美不卡一区二区三区在线 | 亚洲国产片高清在线观看 | 男女男精品视频免费观看 | 国产精品微拍 | 日韩精品在线播放 | 手机在线看片国产日韩生活片 | 国产一区二区三区在线免费观看 | 亚洲伊人久久综合 | 欧美18videosex性视频 | 亚洲一区二区三区在线播放 | 五月激情综合网 | 精品a在线观看 | 精品欧美一区视频在线观看 | 四虎影 | 亚洲精品在线看 | 久草在线视频资源 | 色鬼久久 | 97精品国产高清久久久久蜜芽 | 国产精品国色综合久久 | 欧美一区二区三区免费观看视频 | jjizz老女人多水喷水 | 亚洲日本va在线视频观看 | 色综合色狠狠天天综合色 | 久久99精品久久 | 色播视频在线播放 | 国产伦精品一区三区视频 |