Hibernate 對(duì)象關(guān)系映射_第1頁(yè)
Hibernate 對(duì)象關(guān)系映射_第2頁(yè)
Hibernate 對(duì)象關(guān)系映射_第3頁(yè)
Hibernate 對(duì)象關(guān)系映射_第4頁(yè)
Hibernate 對(duì)象關(guān)系映射_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Prepared by TongGang對(duì)象關(guān)系映射對(duì)象關(guān)系映射Prepared by TongGangHibernate 配置文件Prepared by TongGangHibernateHibernate配置文件配置文件 Hibernate 配置文件主要用于配置數(shù)據(jù)庫(kù)連接和 Hibernate 運(yùn)行時(shí)所需的各種屬性 每個(gè) Hibernate 配置文件對(duì)應(yīng)一個(gè) Configuration 對(duì)象 Hibernate配置文件可以有兩種格式: perties hibernate.cfg.xmlhibernate.cfg.xml Prepared by TongGanghi

2、bernate.cfg.xml的常用屬性 JDBC 連接屬性 connection.url:數(shù)據(jù)庫(kù)URL connection.username:數(shù)據(jù)庫(kù)用戶名 connection.password:數(shù)據(jù)庫(kù)用戶密碼 connection.driver_class:數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng) dialectdialect:配置數(shù)據(jù)庫(kù)的方言,根據(jù)底層的數(shù)據(jù)庫(kù)不同產(chǎn)生不同的sql語(yǔ)句,Hibernate 會(huì)針對(duì)數(shù)據(jù)庫(kù)的特性在訪問(wèn)時(shí)進(jìn)行優(yōu)化Prepared by TongGanghibernate.cfg.xml的常用屬性 C3P0 數(shù)據(jù)庫(kù)連接池屬性 vider

3、_class: 該類用來(lái)向 Hibernate 提供JDBC連接 hibernate.c3p0.max_size: 數(shù)據(jù)庫(kù)連接池的最大連接數(shù) hibernate.c3p0.min_size: 數(shù)據(jù)庫(kù)連接池的最小連接數(shù) hibernate.c3p0.timeout: 數(shù)據(jù)庫(kù)連接池中連接對(duì)象在多長(zhǎng)時(shí)間沒(méi)有使用過(guò)后,就應(yīng)該被銷毀 hibernate.c3p0.max_statements: 緩存 Statement 對(duì)象的數(shù)量 hibernate.c3p0.idle_test_period: 表示連接池檢測(cè)線程檢測(cè)線程多長(zhǎng)時(shí)間檢測(cè)一次池內(nèi)的所有鏈接對(duì)象是否超時(shí). 連接池本身不會(huì)把自己從連接池中移除,

4、而是專門(mén)有一個(gè)線程按照一定的時(shí)間間隔來(lái)做這件事,這個(gè)線程通過(guò)比較連接對(duì)象最后一次被使用時(shí)間和當(dāng)前時(shí)間的時(shí)間差來(lái)和 timeout 做對(duì)比,進(jìn)而決定是否銷毀這個(gè)連接對(duì)象。 hibernate.c3p0.acquire_increment: 當(dāng)數(shù)據(jù)庫(kù)連接池中的連接耗盡時(shí), 同一時(shí)刻獲取多少個(gè)數(shù)據(jù)庫(kù)連接 hibernate.c3p0.validate: 是否每次連接都驗(yàn)證連接是否可用Prepared by TongGanghibernate.cfg.xml的常用屬性 其他 show_sql:是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試。取值 true | false format_sql:是否將 SQ

5、L 轉(zhuǎn)化為格式良好的 SQL . 取值 true | false use_sql_comments:是否在 Hibernate 生成的 SQL 語(yǔ)句中添加有助于調(diào)試的注釋 hbm2ddl.auto:在啟動(dòng)和停止時(shí)自動(dòng)地創(chuàng)建,更新或刪除數(shù)據(jù)庫(kù)模式。取值 create | update | create-drop | validate* hibernate.jdbc.fetch_size hibernate.jdbc.batch_sizePrepared by TongGangjdbc.fetch_sizejdbc.fetch_size 和和 jdbc.batch_sizejdbc.batch_s

6、izehibernate.jdbc.fetch_size:實(shí)質(zhì)是調(diào)用 Statement.setFetchSize() 方法設(shè)定設(shè)定 JDBC JDBC 的的 Statement Statement 讀取數(shù)據(jù)讀取數(shù)據(jù)的時(shí)候每次從數(shù)據(jù)庫(kù)中取出的記錄條數(shù)的時(shí)候每次從數(shù)據(jù)庫(kù)中取出的記錄條數(shù)。 例如一次查詢1萬(wàn)條記錄,對(duì)于Oracle的JDBC驅(qū)動(dòng)來(lái)說(shuō),是不會(huì) 1 次性把1萬(wàn)條取出來(lái)的,而只會(huì)取出 fetchSize 條數(shù),當(dāng)記錄集遍歷完了這些記錄以后,再去數(shù)據(jù)庫(kù)取 fetchSize 條數(shù)據(jù)。因此大大節(jié)省了無(wú)謂的內(nèi)存消耗。Fetch Size設(shè)的越大,讀數(shù)據(jù)庫(kù)的次數(shù)越少,速度越快;Fetch Siz

7、e越小,讀數(shù)據(jù)庫(kù)的次數(shù)越多,速度越慢。Oracle數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)默認(rèn)的Fetch Size = 10,是一個(gè)保守的設(shè)定,根據(jù)測(cè)試,當(dāng)Fetch Size=50時(shí),性能會(huì)提升1倍之多,當(dāng) fetchSizeetchSize=100=100,性能還能繼續(xù)提升20%,F(xiàn)etch Size繼續(xù)增大,性能提升的就不顯著了。并不是所有的數(shù)據(jù)庫(kù)都支持Fetch Size特性,例如MySQL就不支hibernate.jdbc.batch_size:設(shè)定對(duì)數(shù)據(jù)庫(kù)進(jìn)行批量刪除,批量更設(shè)定對(duì)數(shù)據(jù)庫(kù)進(jìn)行批量刪除,批量更新和批量插入的時(shí)候的批次大小新和批量插入的時(shí)候的批次大小,類似于設(shè)置緩沖區(qū)大小的意思。batc

8、hSize 越大,批量操作的向數(shù)據(jù)庫(kù)發(fā)送sql的次數(shù)越少,速度就越快。 測(cè)試結(jié)果是當(dāng)Batch Size=0的時(shí)候,使用Hibernate對(duì)Oracle數(shù)據(jù)庫(kù)刪除1萬(wàn)條記錄需要25秒,Batch Size = 50的時(shí)候,刪除僅僅需要5秒!Oracle數(shù)據(jù)庫(kù) batchSizeatchSize=30=30 的時(shí)候比較合適。Prepared by TongGang對(duì)象關(guān)系映射文件Prepared by TongGang實(shí)體類和數(shù)據(jù)庫(kù)的映射文件*.hbm.xml 實(shí)體類和關(guān)系數(shù)據(jù)庫(kù)之間的映射可以用一個(gè)XML文檔來(lái)定義。 通過(guò)實(shí)體類的數(shù)據(jù)庫(kù)映射文件,Hibernate可以理解持久化類和數(shù)據(jù)表之間的對(duì)

9、應(yīng)關(guān)系,也可以理解持久化類屬性與數(shù)據(jù)庫(kù)表列之間的對(duì)應(yīng)關(guān)系 在運(yùn)行時(shí) Hibernate 將根據(jù)這個(gè)映射文件來(lái)生成各種 SQL 語(yǔ)句 映射文件的擴(kuò)展名為 .hbm.xmlPrepared by TongGang映射文件說(shuō)明 hibernate-mapping 類層次:class 主鍵。id 基本類型:property 實(shí)體引用類: many-to-one | one-to-one 集合:set | list | map | array one-to-many many-to-many 子類:subclass | joined-subclass 其它:component | any 等 查詢語(yǔ)句:

10、query(用來(lái)放置查詢語(yǔ)句,便于對(duì)數(shù)據(jù)庫(kù)查詢的統(tǒng)一管理和優(yōu)化) 一個(gè) hibernate-mapping 中可以同時(shí)定義多個(gè)類. 但更推薦推薦為每個(gè)類都創(chuàng)建一個(gè)單獨(dú)的映射文件為每個(gè)類都創(chuàng)建一個(gè)單獨(dú)的映射文件Prepared by TongGanghibernate-mappinghibernate-mapping hibernate-mapping 是是 hibernate hibernate 映射文件的映射文件的根元素根元素schema: schema: 指定所映射的數(shù)據(jù)庫(kù)指定所映射的數(shù)據(jù)庫(kù)schemaschema的名稱。若指定該的名稱。若指定該屬性屬性, , 則表明會(huì)自動(dòng)添加該則表明會(huì)自

11、動(dòng)添加該 schema schema 前綴前綴catalog:catalog:指定所映射的數(shù)據(jù)庫(kù)指定所映射的數(shù)據(jù)庫(kù)catalogcatalog的名稱。的名稱。 default-cascadedefault-cascade( (默認(rèn)為默認(rèn)為 none): none): 設(shè)置設(shè)置hibernatehibernate默認(rèn)的默認(rèn)的級(jí)聯(lián)風(fēng)格級(jí)聯(lián)風(fēng)格. . 若配置若配置 Java Java 屬性屬性, , 集合映射時(shí)沒(méi)有指定集合映射時(shí)沒(méi)有指定 cascade cascade 屬性屬性, , 則則 Hibernate Hibernate 將采用此處指定的級(jí)聯(lián)風(fēng)將采用此處指定的級(jí)聯(lián)風(fēng)格格. . default

12、-accessdefault-access ( (默認(rèn)為默認(rèn)為 property): property): 指定指定 Hibernate Hibernate 的默認(rèn)的屬性訪問(wèn)策略。默認(rèn)值為的默認(rèn)的屬性訪問(wèn)策略。默認(rèn)值為 property, property, 即使用即使用 getter, setter getter, setter 方法來(lái)訪問(wèn)屬性方法來(lái)訪問(wèn)屬性. . 若指定若指定 access, access, 則則 Hibernate Hibernate 會(huì)忽略會(huì)忽略 getter/setter getter/setter 方法方法, , 而通過(guò)反射訪而通過(guò)反射訪問(wèn)成員變量問(wèn)成員變量. .d

13、efault-lazydefault-lazy( (默認(rèn)為默認(rèn)為 true): true): 設(shè)置設(shè)置 HibernatHibernat morning morning的延遲加載策略的延遲加載策略. . 該屬性的默認(rèn)值為該屬性的默認(rèn)值為 true, true, 即啟用延遲即啟用延遲加載策略加載策略. . 若配置若配置 Java Java 屬性映射屬性映射, , 集合映射時(shí)沒(méi)有指集合映射時(shí)沒(méi)有指定定 lazy lazy 屬性屬性, , 則則 Hibernate Hibernate 將采用此處指定的延遲加將采用此處指定的延遲加載策略載策略 auto-import (auto-import (默認(rèn)為

14、默認(rèn)為 true): true): 指定是否可以在查詢語(yǔ)言指定是否可以在查詢語(yǔ)言中使用非全限定的類名(僅限于本映射文件中的類)。中使用非全限定的類名(僅限于本映射文件中的類)。 package (package (可選可選): ): 指定一個(gè)包前綴,如果在映射文檔中指定一個(gè)包前綴,如果在映射文檔中沒(méi)有指定全限定的類名,沒(méi)有指定全限定的類名, 就使用這個(gè)作為包名。就使用這個(gè)作為包名。 Prepared by TongGangclassclass class 元素用于指定類和表的映射元素用于指定類和表的映射namename: :指定該持久化類映射的持久化類的類名指定該持久化類映射的持久化類的類名t

15、abletable: :指定該持久化類映射的表名指定該持久化類映射的表名, Hibernate , Hibernate 默認(rèn)默認(rèn)以持久化類的類名作為表名以持久化類的類名作為表名dynamic-insertdynamic-insert: : 若設(shè)置為若設(shè)置為 true, true, 表示當(dāng)保存一個(gè)表示當(dāng)保存一個(gè)對(duì)象時(shí)對(duì)象時(shí), , 會(huì)動(dòng)態(tài)生成會(huì)動(dòng)態(tài)生成 insert insert 語(yǔ)句語(yǔ)句, insert , insert 語(yǔ)句中語(yǔ)句中僅包含所有取值不為僅包含所有取值不為 null null 的字段的字段. . 默認(rèn)值為默認(rèn)值為 falsefalsedynamic-updatedynamic-up

16、date: : 若設(shè)置為若設(shè)置為 true, true, 表示當(dāng)更新一個(gè)表示當(dāng)更新一個(gè)對(duì)象時(shí)對(duì)象時(shí), , 會(huì)動(dòng)態(tài)生成會(huì)動(dòng)態(tài)生成 update update 語(yǔ)句語(yǔ)句, update , update 語(yǔ)句中語(yǔ)句中僅包含所有取值需要更新的字段僅包含所有取值需要更新的字段. . 默認(rèn)值為默認(rèn)值為 falsefalseselect-before-updateselect-before-update: :設(shè)置設(shè)置 Hibernate Hibernate 在更新某個(gè)在更新某個(gè)持久化對(duì)象之前是否需要先執(zhí)行一次查詢持久化對(duì)象之前是否需要先執(zhí)行一次查詢. . 默認(rèn)值為默認(rèn)值為 falsefalsebatch-

17、sizebatch-size: :在關(guān)聯(lián)對(duì)象圖時(shí)在關(guān)聯(lián)對(duì)象圖時(shí), , 指定根據(jù)指定根據(jù) OID OID 來(lái)抓取來(lái)抓取實(shí)例時(shí)每批抓取的實(shí)例數(shù)實(shí)例時(shí)每批抓取的實(shí)例數(shù). .lazylazy: : 指定是否使用延遲加載指定是否使用延遲加載. . mutablemutable: : 若設(shè)置為若設(shè)置為 true, true, 等價(jià)于所有的等價(jià)于所有的 元素的元素的 update update 屬性為屬性為 false, false, 表示整表示整個(gè)實(shí)例不能被更新個(gè)實(shí)例不能被更新. . 默認(rèn)為默認(rèn)為 true. true. discriminator-valuediscriminator-value: :

18、指定區(qū)分不同子類的值指定區(qū)分不同子類的值. . 當(dāng)當(dāng)使用使用 元素來(lái)定義持久化類的繼承關(guān)系元素來(lái)定義持久化類的繼承關(guān)系時(shí)需要使用該屬性時(shí)需要使用該屬性Prepared by TongGang映射對(duì)象標(biāo)識(shí)符 Hibernate 使用對(duì)象標(biāo)識(shí)符使用對(duì)象標(biāo)識(shí)符(OID) (OID) 來(lái)建立內(nèi)存中的對(duì)象和數(shù)來(lái)建立內(nèi)存中的對(duì)象和數(shù)據(jù)庫(kù)表中記錄的對(duì)應(yīng)關(guān)系據(jù)庫(kù)表中記錄的對(duì)應(yīng)關(guān)系. 對(duì)象的 OID 和數(shù)據(jù)表的主鍵對(duì)應(yīng). Hibernate 通過(guò)標(biāo)識(shí)符生成器來(lái)為 OID 賦值 Hibernate Hibernate 推薦在數(shù)據(jù)表中使用代理主鍵推薦在數(shù)據(jù)表中使用代理主鍵, , 即不具備業(yè)務(wù)含即不具備業(yè)務(wù)含義的字段

19、義的字段. 代理主鍵通常為整數(shù)類型, 因?yàn)檎麛?shù)類型比字符串類型要節(jié)省更多的數(shù)據(jù)庫(kù)空間. 在對(duì)象-關(guān)系映射文件中, 元素用來(lái)設(shè)置對(duì)象標(biāo)識(shí)符. 子元素用來(lái)設(shè)定標(biāo)識(shí)符生成器. Hibernate 提供了標(biāo)識(shí)符生成器接口: IdentifierGenerator, 并提供了各種內(nèi)置實(shí)現(xiàn)Prepared by TongGangididid:設(shè)定持久化類的:設(shè)定持久化類的 OID OID 和表的主鍵的映射和表的主鍵的映射namename: : 標(biāo)識(shí)持久化類標(biāo)識(shí)持久化類 OID OID 的屬性名的屬性名 columncolumn: : 設(shè)置標(biāo)識(shí)屬性所映射的數(shù)據(jù)列的列名設(shè)置標(biāo)識(shí)屬性所映射的數(shù)據(jù)列的列名( (主

20、鍵字段的主鍵字段的名字名字). ). unsaved-valueunsaved-value: :若設(shè)定了該屬性若設(shè)定了該屬性, Hibernate , Hibernate 會(huì)通過(guò)比較持會(huì)通過(guò)比較持久化類的久化類的 OID OID 值和該屬性值來(lái)區(qū)分當(dāng)前持久化類的對(duì)象是值和該屬性值來(lái)區(qū)分當(dāng)前持久化類的對(duì)象是否為臨時(shí)對(duì)象否為臨時(shí)對(duì)象typetype: :指定指定 Hibernate Hibernate 映射類型映射類型. Hibernate . Hibernate 映射類型是映射類型是 Java Java 類型與類型與 SQL SQL 類型的橋梁類型的橋梁. . 如果沒(méi)有為某個(gè)屬性顯式設(shè)如果沒(méi)有為

21、某個(gè)屬性顯式設(shè)定映射類型定映射類型, Hibernate , Hibernate 會(huì)運(yùn)用反射機(jī)制先識(shí)別出持久化類會(huì)運(yùn)用反射機(jī)制先識(shí)別出持久化類的特定屬性的的特定屬性的 Java Java 類型類型, , 然后自動(dòng)使用與之對(duì)應(yīng)的默認(rèn)的然后自動(dòng)使用與之對(duì)應(yīng)的默認(rèn)的 Hibernate Hibernate 映射類型映射類型Java Java 的基本數(shù)據(jù)類型和包裝類型對(duì)應(yīng)相同的的基本數(shù)據(jù)類型和包裝類型對(duì)應(yīng)相同的 Hibernate Hibernate 映映射類型射類型. . 基本數(shù)據(jù)類型無(wú)法表達(dá)基本數(shù)據(jù)類型無(wú)法表達(dá) null, null, 所以對(duì)于所以對(duì)于持久化類持久化類的的 OID OID 推薦使用

22、包裝類型推薦使用包裝類型Prepared by TongGanggeneratorgenerator generatorgenerator:設(shè)定持久化類設(shè)定標(biāo)識(shí)符生成器:設(shè)定持久化類設(shè)定標(biāo)識(shí)符生成器class: class: 指定使用的標(biāo)識(shí)符生成器全限定類名或其縮寫(xiě)名指定使用的標(biāo)識(shí)符生成器全限定類名或其縮寫(xiě)名Prepared by TongGang主鍵生成策略主鍵生成策略generatorgenerator Hibernate提供的內(nèi)置標(biāo)識(shí)符生成器: Prepared by TongGangincrement 標(biāo)識(shí)符生成器 increment 標(biāo)識(shí)符生成器由由 HibernateHiberna

23、te 以遞增的方式為代理主鍵賦值 Hibernate 會(huì)先讀取 NEWS 表中的主鍵的最大值, 而接下來(lái)向 NEWS 表中插入記錄時(shí), 就在 max(id) 的基礎(chǔ)上遞增, 增量為 1. 適用范圍: 由于 increment 生存標(biāo)識(shí)符機(jī)制不依賴于底層數(shù)據(jù)庫(kù)系統(tǒng), 因此它適合所有的數(shù)據(jù)庫(kù)系統(tǒng) 適用于只有單個(gè) Hibernate 應(yīng)用進(jìn)程應(yīng)用進(jìn)程訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)的場(chǎng)合, 在集群環(huán)境下不推薦使用它不推薦使用它 OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運(yùn)行時(shí)會(huì)拋出異常Prepared by TongGangidentity 標(biāo)識(shí)符生成器

24、 identity 標(biāo)識(shí)符生成器由底層數(shù)據(jù)庫(kù)來(lái)負(fù)責(zé)生成標(biāo)識(shí)符, 它要求底層數(shù)據(jù)庫(kù)把主鍵定義為自動(dòng)增長(zhǎng)字段類型把主鍵定義為自動(dòng)增長(zhǎng)字段類型 適用范圍: 由于 identity 生成標(biāo)識(shí)符的機(jī)制依賴于底層數(shù)據(jù)庫(kù)系統(tǒng), 因此, 要求底層數(shù)據(jù)庫(kù)系統(tǒng)必須支持自動(dòng)增長(zhǎng)字段類型要求底層數(shù)據(jù)庫(kù)系統(tǒng)必須支持自動(dòng)增長(zhǎng)字段類型. 支持自動(dòng)增長(zhǎng)字段類型的數(shù)據(jù)庫(kù)包括: DB2, Mysql, MSSQLServer, Sybase 等 OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運(yùn)行時(shí)會(huì)拋出異常Prepared by TongGangsequence 標(biāo)識(shí)符生

25、成器 sequence 標(biāo)識(shí)符生成器利用底層數(shù)據(jù)庫(kù)提供的序列序列來(lái)生成標(biāo)識(shí)符. Hibernate 在持久化一個(gè) News 對(duì)象時(shí), 先從底層數(shù)據(jù)庫(kù)的 news_seq 序列中獲得一個(gè)唯一的標(biāo)識(shí)號(hào), 再把它作為主鍵值 適用范圍: 由于 sequence 生成標(biāo)識(shí)符的機(jī)制依賴于底層數(shù)據(jù)庫(kù)系統(tǒng)的序列, 因此, 要求底層數(shù)據(jù)庫(kù)系統(tǒng)必須支持序列底層數(shù)據(jù)庫(kù)系統(tǒng)必須支持序列. 支持序列的數(shù)據(jù)庫(kù)包括: DB2 Oracle 等 OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運(yùn)行時(shí)會(huì)拋出異常Prepared by TongGanghilo 標(biāo)識(shí)符生成器

26、 hilo 標(biāo)識(shí)符生成器由 Hibernate 按照一種 high/low 算法算法*生成標(biāo)識(shí)符, 它從數(shù)據(jù)庫(kù)的特定表的字段中獲取 high 值. Hibernate 在持久化一個(gè) News 對(duì)象時(shí), 由 Hibernate 負(fù)責(zé)生成主鍵值. hilohilo 標(biāo)識(shí)符生成器在生成標(biāo)識(shí)符時(shí)標(biāo)識(shí)符生成器在生成標(biāo)識(shí)符時(shí), , 需要需要讀取并修改讀取并修改 HI_TABLE HI_TABLE 表中的表中的 NEXT_VALUE NEXT_VALUE 值值. 適用范圍: 由于 hilo 生存標(biāo)識(shí)符機(jī)制不依賴于底層數(shù)據(jù)庫(kù)系統(tǒng), 因此它適合所有的數(shù)據(jù)庫(kù)系統(tǒng) OID 必須為 long, int 或 short

27、 類型, 如果把 OID 定義為 byte 類型, 在運(yùn)行時(shí)會(huì)拋出異常Prepared by TongGangnative 標(biāo)識(shí)符生成器 native 標(biāo)識(shí)符生成器依據(jù)底層數(shù)據(jù)庫(kù)對(duì)自動(dòng)生成標(biāo)識(shí)符的支持能力, 來(lái)選擇使用 identity, sequence 或 hilo 標(biāo)識(shí)符生成器. 適用范圍: 由于 native 能根據(jù)底層數(shù)據(jù)庫(kù)系統(tǒng)的類型, 自動(dòng)選擇合適的標(biāo)識(shí)符生成器, 因此很適合于跨數(shù)據(jù)庫(kù)平臺(tái)開(kāi)發(fā) OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運(yùn)行時(shí)會(huì)拋出異常Prepared by TongGangPropertypropert

28、y property 元素用于指定類的屬性和表的字段元素用于指定類的屬性和表的字段的映射的映射namename: :指定該持久化類的屬性的名字指定該持久化類的屬性的名字columncolumn: :指定與類的屬性映射的表的字段名指定與類的屬性映射的表的字段名. . 如果沒(méi)有如果沒(méi)有設(shè)置該屬性設(shè)置該屬性, Hibernate , Hibernate 將直接使用類的屬性名作為將直接使用類的屬性名作為字段名字段名. . typetype: :指定指定 Hibernate Hibernate 映射類型映射類型. Hibernate . Hibernate 映射類映射類型是型是 Java Java 類型

29、與類型與 SQL SQL 類型的橋梁類型的橋梁. . 如果沒(méi)有為某個(gè)如果沒(méi)有為某個(gè)屬性顯式設(shè)定映射類型屬性顯式設(shè)定映射類型, Hibernate , Hibernate 會(huì)運(yùn)用反射機(jī)制會(huì)運(yùn)用反射機(jī)制先識(shí)別出持久化類的特定屬性的先識(shí)別出持久化類的特定屬性的 Java Java 類型類型, , 然后自然后自動(dòng)使用與之對(duì)應(yīng)的默認(rèn)的動(dòng)使用與之對(duì)應(yīng)的默認(rèn)的 Hibernate Hibernate 映射類型映射類型. .not-nullnot-null: :若該屬性值為若該屬性值為 true, true, 表明不允許為表明不允許為 null, null, 默認(rèn)為默認(rèn)為 falsefalseinsertin

30、sert: : 如果為如果為 false, false, 在在 insert insert 語(yǔ)句中不包含該語(yǔ)句中不包含該字段字段, , 表明該字段永遠(yuǎn)不能被插入表明該字段永遠(yuǎn)不能被插入. . 默認(rèn)值為默認(rèn)值為 truetrueupdateupdate: :如果為如果為 false, false, 在在 update update 語(yǔ)句中不包含該字語(yǔ)句中不包含該字段段, , 表明該字段永遠(yuǎn)不能被更新表明該字段永遠(yuǎn)不能被更新. . 默認(rèn)值為默認(rèn)值為 truetrueaccessaccess: :指定指定 Hibernate Hibernate 的默認(rèn)的屬性訪問(wèn)策略。默的默認(rèn)的屬性訪問(wèn)策略。默認(rèn)值為

31、認(rèn)值為 property, property, 即使用即使用 getter, setter getter, setter 方法來(lái)訪方法來(lái)訪問(wèn)屬性問(wèn)屬性. . 若指定若指定 access, access, 則則 Hibernate Hibernate 會(huì)忽略會(huì)忽略 getter/setter getter/setter 方法方法, , 而通過(guò)反射訪問(wèn)成員變量而通過(guò)反射訪問(wèn)成員變量Prepared by TongGangproperty property 元素用于指定類的屬性和表的字段元素用于指定類的屬性和表的字段的映射的映射uniqueunique: : 設(shè)置是否為該屬性所映射的數(shù)據(jù)列添加唯一設(shè)

32、置是否為該屬性所映射的數(shù)據(jù)列添加唯一約束約束. . 若設(shè)置為若設(shè)置為 true, true, 就允許該字段作為就允許該字段作為 property-property-ref ref 引用的目標(biāo)引用的目標(biāo)indexindex: : 指定一個(gè)字符串的索引名稱指定一個(gè)字符串的索引名稱. . 當(dāng)系統(tǒng)需要當(dāng)系統(tǒng)需要 Hibernate Hibernate 自動(dòng)建表時(shí)自動(dòng)建表時(shí), , 用于為該屬性所映射的數(shù)據(jù)用于為該屬性所映射的數(shù)據(jù)列創(chuàng)建索引列創(chuàng)建索引, , 從而加快給予該數(shù)據(jù)列的查詢從而加快給予該數(shù)據(jù)列的查詢. .lengthlength: : 指定該屬性所映射數(shù)據(jù)列的字段的長(zhǎng)度指定該屬性所映射數(shù)據(jù)列的字

33、段的長(zhǎng)度scalescale: : 指定該屬性所映射數(shù)據(jù)列的小數(shù)位數(shù)指定該屬性所映射數(shù)據(jù)列的小數(shù)位數(shù), , 對(duì)對(duì) double, float, decimal double, float, decimal 等類型的數(shù)據(jù)列有效等類型的數(shù)據(jù)列有效. .formulaformula:設(shè)置一個(gè):設(shè)置一個(gè) SQL SQL 表達(dá)式表達(dá)式, Hibernate , Hibernate 將根據(jù)將根據(jù)它來(lái)計(jì)算出派生屬性的值它來(lái)計(jì)算出派生屬性的值. . 派生屬性派生屬性: : 并不是持久化類的所有屬性都直接和表的并不是持久化類的所有屬性都直接和表的字段匹配字段匹配, , 持久化類的有些屬性的值必須在運(yùn)行時(shí)通持久化

34、類的有些屬性的值必須在運(yùn)行時(shí)通過(guò)計(jì)算才能得出來(lái)過(guò)計(jì)算才能得出來(lái), , 這種屬性稱為派生屬性這種屬性稱為派生屬性使用使用 formula formula 屬性時(shí)屬性時(shí)formula=“(sqlformula=“(sql)” )” 的英文括號(hào)不能少的英文括號(hào)不能少SqlSql 表達(dá)式中的列名和表名都應(yīng)該和數(shù)據(jù)庫(kù)對(duì)應(yīng)表達(dá)式中的列名和表名都應(yīng)該和數(shù)據(jù)庫(kù)對(duì)應(yīng), , 而而不是和持久化對(duì)象的屬性對(duì)應(yīng)不是和持久化對(duì)象的屬性對(duì)應(yīng)如果需要在如果需要在 formula formula 屬性中使用參數(shù)屬性中使用參數(shù), , 這直接使用這直接使用 where cur.idwhere cur.id=id =id 形式形式,

35、 , 其中其中 id id 就是參數(shù)就是參數(shù), , 和當(dāng)前和當(dāng)前持久化對(duì)象的持久化對(duì)象的 id id 屬性對(duì)應(yīng)的列的屬性對(duì)應(yīng)的列的 id id 值將作為參數(shù)值將作為參數(shù)傳入傳入. . Property*Prepared by TongGangJava Java 類型類型, Hibernate , Hibernate 映射類型及映射類型及 SQL SQL 類型之間的對(duì)應(yīng)關(guān)系類型之間的對(duì)應(yīng)關(guān)系 Prepared by TongGangJava Java 類型類型, Hibernate , Hibernate 映射類型及映射類型及 SQL SQL 類型之間的對(duì)應(yīng)關(guān)系類型之間的對(duì)應(yīng)關(guān)系Prepared

36、 by TongGangJava 時(shí)間和日期類型的 Hibernate 映射類型在 Java 中, 代表時(shí)間和日期的類型包括: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中還提供了 3 個(gè)擴(kuò)展了 java.util.Date 類的子類: java.sql.Date, java.sql.Time 和 java.sql.Timestamp, 這三個(gè)類分別和標(biāo)準(zhǔn) SQL 類型中的 DATE, TIME 和 TIMESTAMP 類型對(duì)應(yīng)在標(biāo)準(zhǔn) SQL 中, DATE 類型表示日期, TIME 類型表示時(shí)間, TIMESTAMP 類型表示時(shí)間

37、戳, 同時(shí)包含日期和時(shí)間信息. Prepared by TongGangJava 大對(duì)象類型的 Hiberante 映射類型在 Java 中, java.lang.String 可用于表示長(zhǎng)字符串(長(zhǎng)度超過(guò) 255), 字符數(shù)組 byte 可用于存放圖片或文件的二進(jìn)制數(shù)據(jù). 此外, 在 JDBC API 中還提供了 java.sql.Clob 和 java.sql.Blob 類型, 它們分別和標(biāo)準(zhǔn) SQL 中的 CLOB 和 BLOB 類型對(duì)應(yīng). CLOB 表示字符串大對(duì)象(Character Large Object), BLOB表示二進(jìn)制大對(duì)象(Binary Large Object)My

38、sql 不支持標(biāo)準(zhǔn) SQL 的 CLOB 類型, 在 Mysql 中, 用 TEXT, MEDIUMTEXT 及 LONGTEXT 類型來(lái)表示長(zhǎng)度操作 255 的長(zhǎng)文本數(shù)據(jù)在持久化類中, 二進(jìn)制大對(duì)象可以聲明為 byte 或 java.sql.Blob 類型; 字符串可以聲明為 java.lang.String 或 java.sql.Blob實(shí)際上在 Java 應(yīng)用程序中處理長(zhǎng)度超過(guò) 255 的字符串, 使用 java.lang.String 比 java.sql.Clob 更方便; 使用 byte 比 java.sql.Blob 更方便. Prepared by TongGang使用 Hib

39、ernate 內(nèi)置映射類型 以下情況下必須顯式指定必須顯式指定 Hibernate Hibernate 映射類型映射類型 一個(gè) Java 類型對(duì)應(yīng)多個(gè) Hibernate 映射類型時(shí). 例如: 如果持久化類的屬性為 java.util.Date 類型, 對(duì)應(yīng)的 Hibernate 映射類型可以是 date, time 或 timestamp. 此時(shí)必須根據(jù)對(duì)應(yīng)的數(shù)據(jù)表的字段的 SQL 類型, 來(lái)確定 Hibernate 映射類型. 如果字段為 DATE 類型, 那么 Hibernate 映射類型為 date; 如果字段為 TIME 類型, 那么 Hibernate 映射類型為 time; 如果

40、字段為 TIMESTATMP 類型, 那么 Hibernate 映射類型為 timestamp.Prepared by TongGang練習(xí)1根據(jù)給定的 Java 類寫(xiě)出相對(duì)應(yīng)的 hbm.xml 文件, 由 Hibernate 生成 對(duì)應(yīng)的數(shù)據(jù)表,并完成對(duì) Customer 記錄在數(shù)據(jù)表中增刪改查操作Prepared by TongGang映射組成關(guān)系* 建立域模型和關(guān)系數(shù)據(jù)模型有著不同的出發(fā)點(diǎn): 域模型: 由程序代碼組成由程序代碼組成, , 通過(guò)細(xì)化持久化類的的粒度可提高代碼的可通過(guò)細(xì)化持久化類的的粒度可提高代碼的可重用性重用性, , 簡(jiǎn)化編程簡(jiǎn)化編程 關(guān)系數(shù)據(jù)模型: 由關(guān)系數(shù)據(jù)組成由關(guān)系數(shù)

41、據(jù)組成, 在存在數(shù)據(jù)冗余的情況下, 需要把粗粒度的表拆分成具有外鍵參照關(guān)系的幾個(gè)細(xì)粒度的表, 從而節(jié)省存儲(chǔ)空間; 另一方面, 在沒(méi)有數(shù)據(jù)冗余的情況下在沒(méi)有數(shù)據(jù)冗余的情況下, , 應(yīng)該盡可能減少表的數(shù)目應(yīng)該盡可能減少表的數(shù)目, , 簡(jiǎn)化表之間的參照關(guān)系簡(jiǎn)化表之間的參照關(guān)系, , 以便提高數(shù)據(jù)的訪問(wèn)速度以便提高數(shù)據(jù)的訪問(wèn)速度Prepared by TongGang映射組成關(guān)系 Hibernate 把持久化類的屬性分為兩種: 值值(value)(value)類型類型: 沒(méi)有沒(méi)有 OIDOID, 不能被單獨(dú)持久化不能被單獨(dú)持久化, 生命周期依賴于所屬生命周期依賴于所屬的持久化類的對(duì)象的生命周期的持久化

42、類的對(duì)象的生命周期 實(shí)體(entity)類型: 有 OID, 可以被單獨(dú)持久化, 有獨(dú)立的生命周期 顯然無(wú)法直接用 property 映射 name 屬性 Hibernate 使用 元素來(lái)映射組成關(guān)系, 該元素表明 pay 屬性是 Worker 類一個(gè)組成部分, 在 Hibernate 中稱之為組件組件Prepared by TongGangcomponent 元素來(lái)映射組成關(guān)系元素來(lái)映射組成關(guān)系 class:class:設(shè)定組成關(guān)系屬性的類型設(shè)定組成關(guān)系屬性的類型, , 此處表明此處表明 pay pay 屬屬性為性為 Pay Pay 類型類型 parent 元素元素指定指定組件屬性所屬的整體

43、類組件屬性所屬的整體類 name: name: 整體類在組件類中的屬性名整體類在組件類中的屬性名Prepared by TongGang映射一對(duì)多關(guān)聯(lián)關(guān)系Prepared by TongGang一對(duì)多關(guān)聯(lián)關(guān)系 在域模型中, 類與類之間最普遍的關(guān)系就是關(guān)聯(lián)關(guān)系. 在 UML 中, 關(guān)聯(lián)是有方向的. 以 Customer 和 Order 為例: 一個(gè)用戶能發(fā)出多個(gè)訂單, 而一個(gè)訂單只能屬于一個(gè)客戶. 從 Order 到 Customer 的關(guān)聯(lián)使多對(duì)一關(guān)聯(lián); 而從 Customer 到 Order 是一對(duì)多關(guān)聯(lián) 單向關(guān)聯(lián) 雙向關(guān)聯(lián)Prepared by TongGang單向 n-1 單向 n-1

44、關(guān)聯(lián)只需從 n 的一端可以訪問(wèn) 1 的一端 域模型: 從 Order 到 Customer 的多對(duì)一單向關(guān)聯(lián)需要在Order 類中定義一個(gè) Customer 屬性, 而在 Customer 類中無(wú)需定義存放 Order 對(duì)象的集合屬性 關(guān)系數(shù)據(jù)模型:ORDERS 表中的 CUSTOMER_ID 參照 CUSTOMER 表的主鍵ORDERS 表CUSTOMERS 表Prepared by TongGang單向 n-1 顯然無(wú)法直接用 property 映射 customer 屬性 因?yàn)?Customer 有主鍵, 所以也不能使用 component 進(jìn)行映射 Hibernate 使用 元素來(lái)映射

45、多對(duì)一關(guān)聯(lián)關(guān)系Prepared by TongGangmany-to-one many-to-one 元素來(lái)映射元素來(lái)映射多對(duì)一的關(guān)聯(lián)關(guān)系多對(duì)一的關(guān)聯(lián)關(guān)系 name: name: 設(shè)定待映射的持久化類的屬性的名字設(shè)定待映射的持久化類的屬性的名字 column: column: 設(shè)定和持久化類的屬性對(duì)應(yīng)的表的外鍵設(shè)定和持久化類的屬性對(duì)應(yīng)的表的外鍵 classclass:設(shè)定待映射的持久化類的屬性的類型:設(shè)定待映射的持久化類的屬性的類型Prepared by TongGang雙向 1-n 雙向 1-n 與 雙向 n-1 是完全相同的兩種情形 雙向 1-n 需要在 1 的一端可以訪問(wèn) n 的一端,

46、反之依然. 域模型:從 Order 到 Customer 的多對(duì)一單向關(guān)聯(lián)需要在Order 類中定義一個(gè) Customer 屬性, 而在 Customer 類中需定義存放 Order 對(duì)象的集合屬性 關(guān)系數(shù)據(jù)模型:ORDERS 表中的 CUSTOMER_ID 參照 CUSTOMER 表的主鍵ORDERS 表CUSTOMERS 表Prepared by TongGang雙向 1-n 當(dāng) Session 從數(shù)據(jù)庫(kù)中加載 Java 集合時(shí), 創(chuàng)建的是 Hibernate 內(nèi)置集合類的實(shí)例, 因此在持久化類中定義集合屬在持久化類中定義集合屬性時(shí)必須把屬性聲明為性時(shí)必須把屬性聲明為 Java Java

47、接口類型接口類型 Hibernate 的內(nèi)置集合類具有集合代理功能, 支持延遲檢索策略 Hibernate 的內(nèi)置集合類都封裝了 JDK 中的集合類, 這使得 Hibernate 能夠?qū)彺嬷械募蠈?duì)象進(jìn)行臟檢查, 按照集合對(duì)象的狀態(tài)來(lái)同步更新數(shù)據(jù)庫(kù)。 在定義集合屬性時(shí)在定義集合屬性時(shí), , 通常把它初始化為集合實(shí)現(xiàn)類的一個(gè)實(shí)例通常把它初始化為集合實(shí)現(xiàn)類的一個(gè)實(shí)例. 這樣可以提高程序的健壯性, 避免應(yīng)用程序訪問(wèn)取值為 null 的集合的方法而拋出 NullPointerExceptionPrepared by TongGang雙向 1-n Hibernate 使用 元素來(lái)映射 set 類型的屬

48、性Prepared by TongGangset set 元素來(lái)映射元素來(lái)映射持久化持久化類的類的 set set 類型的屬性類型的屬性 name: name: 設(shè)定待映射的持久化類的屬性名設(shè)定待映射的持久化類的屬性名Prepared by TongGangkey key 元素元素設(shè)定設(shè)定與所關(guān)聯(lián)的持久化類對(duì)應(yīng)的表的外鍵與所關(guān)聯(lián)的持久化類對(duì)應(yīng)的表的外鍵 column: column: 指定關(guān)聯(lián)表的外鍵名指定關(guān)聯(lián)表的外鍵名Prepared by TongGangone-to-many one-to-many 元素元素設(shè)定設(shè)定集合屬性中所關(guān)聯(lián)的持久化集合屬性中所關(guān)聯(lián)的持久化類類 class: cl

49、ass: 指定關(guān)聯(lián)的持久化類的類名指定關(guān)聯(lián)的持久化類的類名Prepared by TongGangcascade 屬性在對(duì)象 關(guān)系映射文件中, 用于映射持久化類之間關(guān)聯(lián)關(guān)系的元素, , 和 都有一個(gè) cascade 屬性, 它用于指定如何操指定如何操縱與當(dāng)前對(duì)象關(guān)聯(lián)的其他對(duì)象縱與當(dāng)前對(duì)象關(guān)聯(lián)的其他對(duì)象. Prepared by TongGang 元素的 inverse 屬性 在在hibernatehibernate中通過(guò)對(duì)中通過(guò)對(duì) inverse inverse 屬性的來(lái)決定是由雙向關(guān)聯(lián)屬性的來(lái)決定是由雙向關(guān)聯(lián)的哪一方來(lái)維護(hù)表和表之間的關(guān)系的哪一方來(lái)維護(hù)表和表之間的關(guān)系. inverse=fa

50、lse . inverse=false 的為主的為主動(dòng)方,動(dòng)方,inverse=true inverse=true 的為被動(dòng)方的為被動(dòng)方, , 由主動(dòng)方負(fù)責(zé)維護(hù)關(guān)聯(lián)由主動(dòng)方負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系關(guān)系 在沒(méi)有設(shè)置在沒(méi)有設(shè)置 inverse=true inverse=true 的情況下,父子兩邊都維護(hù)父子的情況下,父子兩邊都維護(hù)父子 關(guān)系關(guān)系 在 1-n 關(guān)系中,將 n 方設(shè)為主控方將有助于性能改善(如果要國(guó)家元首記住全國(guó)人民的名字,不是太可能,但要讓全國(guó)人民知道國(guó)家元首,就容易的多) 在 1-N 關(guān)系中,若將 1 方設(shè)為主控方 會(huì)額外多出 update 語(yǔ)句。 插入數(shù)據(jù)時(shí)無(wú)法同時(shí)插入外鍵列,因而無(wú)法為

51、外鍵列添加非空約束Prepared by TongGang在數(shù)據(jù)庫(kù)中對(duì)集合排序 元素有一個(gè) order-by 屬性, 如果設(shè)置了該屬性, 當(dāng) Hibernate 通過(guò) select 語(yǔ)句到數(shù)據(jù)庫(kù)中檢索集合對(duì)象時(shí), 利用 order by 子句進(jìn)行排序 order-by 屬性中還可以加入 SQL 函數(shù)Prepared by TongGang映射一對(duì)一關(guān)聯(lián)關(guān)系Prepared by TongGang1 - 1 域模型 關(guān)系數(shù)據(jù)模型: 按照外鍵映射: 按照主鍵映射:DEPARTMENTS 表MANAGERS 表DEPARTMENTS 表MANAGERS 表Prepared by TongGang基于

52、外鍵映射的 1-1 對(duì)于基于外鍵的1-1關(guān)聯(lián),其外鍵可以存放在任意一邊,在需在需要存放外鍵一端,增加要存放外鍵一端,增加 many-to-one many-to-one 元素元素。為 many-to-one元素增加 unique=“true” 屬性來(lái)表示為1-1關(guān)聯(lián),并用name屬性來(lái)指定關(guān)聯(lián)屬性的屬性名 另一端需要使用one-to-one元素,該元素使用 property-refproperty-ref 屬性指定使用被關(guān)聯(lián)實(shí)體主鍵以外的字段作為關(guān)聯(lián)字段 不使用 property-ref 屬性的 sql 使用 property-ref 屬性的 sqlPrepared by TongGang基于

53、主鍵映射的 1-1基于主鍵的映射策略:指一端的主鍵生成器使用 foreign 策略,表明根據(jù)”對(duì)方對(duì)方”的主鍵來(lái)生成自己的主鍵,自己并不能獨(dú)立生成主鍵. 子元素指定使用當(dāng)前持久化類的哪個(gè)屬性作為 “對(duì)方對(duì)方”采用foreign主鍵生成器策略的一端增加 one-to-one 元素映射關(guān)聯(lián)屬性,其 one-to-one 屬性還應(yīng)增加 constrained=“true”constrained=“true” 屬性;另一端增加one-to-one元素映射關(guān)聯(lián)屬性。constrained(約束):指定為當(dāng)前持久化類對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的主鍵添加一個(gè)外鍵約束,引用被關(guān)聯(lián)的對(duì)象(“對(duì)方對(duì)方”)所對(duì)應(yīng)的數(shù)據(jù)庫(kù)表主鍵

54、Prepared by TongGang映射多對(duì)多關(guān)聯(lián)關(guān)系Prepared by TongGang單向 n-n 域模型: 關(guān)系數(shù)據(jù)模型CATEGORIES 表CATEGORIES_ITEMS 表ITEMS 表Prepared by TongGang單向 n-n n-n 的關(guān)聯(lián)必須使用連接表的關(guān)聯(lián)必須使用連接表 與 1-n 映射類似,必須為 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中參照 CATEGORIES 表的外鍵為 CATEGORIY_ID. 與 1-n 關(guān)聯(lián)映射不同的是,建立 n-n 關(guān)聯(lián)時(shí), 集合中的元素使用 many-to-many. many

55、-to-many 子元素的 class 屬性指定 items 集合中存放的是 Item 對(duì)象, column 屬性指定 CATEGORIES_ITEMS 表中參照 ITEMS 表的外鍵為 ITEM_IDPrepared by TongGangPrepared by TongGang雙向 n-n 域模型: 關(guān)系數(shù)據(jù)模型CATEGORIES 表CATEGORIES_ITEMS 表ITEMS 表Prepared by TongGang雙向n-n關(guān)聯(lián) 雙向 n-n 關(guān)聯(lián)需要兩端都使用集合屬性兩端都使用集合屬性 雙向n-n關(guān)聯(lián)必須使用連接表必須使用連接表 集合屬性應(yīng)增加 key 子元素用以映射外鍵列,

56、集合元素里還應(yīng)增加many-to-many子元素關(guān)聯(lián)實(shí)體類 在雙向在雙向 n-n 關(guān)聯(lián)的兩邊都需指定連接表的表名及外鍵列的列關(guān)聯(lián)的兩邊都需指定連接表的表名及外鍵列的列名名. 兩個(gè)集合元素兩個(gè)集合元素 set 的的 table 元素的值必須指定,而且必須元素的值必須指定,而且必須相同。相同。set元素的兩個(gè)子元素:元素的兩個(gè)子元素:key 和和 many-to-many 都必須都必須指定指定 column 屬性,其中,屬性,其中,key 和和 many-to-many 分別指定分別指定本持久化類和關(guān)聯(lián)類在連接表中的外鍵列名,因此兩邊的本持久化類和關(guān)聯(lián)類在連接表中的外鍵列名,因此兩邊的 key 與

57、與 many-to-many 的的column屬性交叉相同屬性交叉相同。也就是說(shuō),一邊的set元素的key的 cloumn值為a,many-to-many 的 column 為b;則另一邊的 set 元素的 key 的 column 值 b,many-to-many的 column 值為 a. 對(duì)于雙向?qū)τ陔p向 n-n 關(guān)聯(lián)關(guān)聯(lián), 須把其中一端的須把其中一端的 inverse 設(shè)置為設(shè)置為 true, 否則可能會(huì)造成主鍵沖突.Prepared by TongGang映射繼承關(guān)系Prepared by TongGang繼承映射 對(duì)于面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言而言,繼承和多態(tài)是兩個(gè)最基本的概念。Hibernate 的繼承映射可以理解持久化類之間的繼承關(guān)系。例如:人和學(xué)生之間的關(guān)系。學(xué)生繼承了人,可以認(rèn)為學(xué)生是一個(gè)特殊的人,如果對(duì)人進(jìn)行查詢,學(xué)生的實(shí)例也將被得到。Prepared

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論