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

Hibernate映射詳解(三)--一對一主鍵關聯映射

系統 1903 0

一對一主鍵關聯映射:我們來拿人和身份證舉例。采用一對一主鍵關聯映射,他要表達的意思是人的 id 來自于身份證的 id 。要想在人的表中存數據,在身份證表中必須有對應的 id 的身份證記錄。如圖所示:

Hibernate映射詳解(三)--一對一主鍵關聯映射

表關系為:

Hibernate映射詳解(三)--一對一主鍵關聯映射

我們看一下具體的實現:

實體類實現:

public class Person {

private int id ;

private String name ;

private IdCard idCard ; // 提供關聯的屬性

…. 省略 get set 方法

}

public class IdCard {

private int id ;

private String cardNo ;

…. 省略 get set 方法

}

對應的映射文件設置為:

Person.hbm.xml

< hibernate-mapping >

< class name = "com.bjpowernode.hibernate.Person" table = "t_person" >

< id name = "id" >

<!-- 采用 foreign 生成策略, forgeign 會取得關聯對象的標識,通俗點說就是 person 中這個主鍵 id 來自于 idCard 對象的主鍵。而從實體屬性中可以知道 idCard IdCard 類型,即 Person 中主鍵來自于 IdCard 中的主鍵 -->

< generator class = "foreign" >

<!-- property 只關聯對象 -->

< param name = "property" > idCard </ param >

</ generator >

</ id >

< property name = "name" />

<!--

one-to-one 指示 hibernate 如何加載其關聯對象,默認根據主鍵加載 也就是拿到關系字段值,根據對端的主鍵來加載關聯對象

constrained="true 表示,當前主鍵 (person 的主鍵 ) 還是一個外鍵

參照了對端的主鍵( IdCard 的主鍵),也就是會生成外鍵約束語句

-->

< one-to-one name = "idCard" constrained = "true" />

</ class >

</ hibernate-mapping >

IdCard.hbm.xml

< hibernate-mapping >

< class name = "com.bjpowernode.hibernate.IdCard" table = "t_idCard" >

< id name = "id" >

< generator class = "native" />

</ id >

< property name = "cardNo" />

</ class >

</ hibernate-mapping >

采用一對一主鍵關聯映射,兩個實體的主鍵一樣,這樣就不需要加入多余的字段了。我們在加載維護關系的一端如例子中提到的 Person 時,從他的實體類實現也可以看出,要給他的 IdCard 屬性賦值。但是賦值時,是不需要必須顯示的用 session save 將其變為 Persistent 狀態的。因為一對一的主鍵關聯映射已經為我們執行了此操作。也可以說他默認了 cascade 級聯特性。說了一對一主鍵關聯映射,自然也少不了雙向關聯映射。一對一主鍵雙向關聯映射和單向關聯映射在存儲方式上是沒有什么不同的。但在查詢上會稍有不同。看一下實現:

實體實現:

public class IdCard {

private int id ;

private String cardNo ;

private Person person ; // 關聯 Person 對象

省略 get set 方法

}

public class Person {

private int id ;

private String name ;

private IdCard idCard ; // 關聯 IdCard 對象

省略 get set 方法

}

從實體類上來說,每端都能看到另一端的對象。查詢的時候,我們自然可以從任意一段進行查詢了。這是一點不同。再來看映射文件

IdCard.hbm.xml

< hibernate-mapping >

< class name = "com.bjpowernode.hibernate.IdCard" table = "t_idCard" >

< id name = "id" >

< generator class = "native" />

</ id >

< property name = "cardNo" />

<!-- 相對于單向,只是多了一句 one-to-one -->

< one-to-one name = "person" />

</ class >

</ hibernate-mapping >

Person.hbm.xml

< hibernate-mapping >

< class name = "com.bjpowernode.hibernate.Person" table = "t_person" >

< id name = "id" >

< generator class = "foreign" >

<!-- property 只關聯對象 -->

< param name = "property" > idCard </ param >

</ generator >

</ id >

< property name = "name" />

< one-to-one name = "idCard" constrained = "true" />

</ class >

</ hibernate-mapping >

可以看出 Person 的映射文件與單向關聯是完全一樣的。在單向關聯中,我們只能從 Person 一端查詢的時候才可以查詢到 IdCard 端的值。如果我們只查詢 IdCard 的屬性, Person 是不能被查詢到的。而在雙向關聯中,我們則可以通過任意一端查詢到另外一端的屬性。單項和雙項在這一區別上得到了驗證。

一對一唯一外鍵關聯映射請看下一篇博客。

Hibernate映射詳解(三)--一對一主鍵關聯映射


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 97天堂| 久久综合久 | 久久综合久色欧美综合狠狠 | 日本在线观看视频网站 | 九九99九九在线精品视频 | 91麻豆精东果冻天美传媒老狼 | 911色_911色sss主站色播 | 久久久一区二区三区精品 | 免费黄色小视频 | 午夜精品久久久 | 欧美亚洲高清 | 久久精品国产免费中文 | 青青草免费观看完整版高清 | 魔法骑士在线观看免费完整版 | 超级碰碰碰频视频免费观看 | 欧美高清色 | 毛片在线不卡 | 亚洲欧美日韩综合在线 | 亚洲国产中文字幕 | 梦中人在线观看免费完整版 | 久久久久久久99精品免费观看 | 午夜精品久久久久久 | 久久人| 偷拍自拍在线播放 | 国产睡熟迷奷系列网站 | 国产婷婷色一区二区三区在线 | 日韩电影中文字幕 | 麻豆短视频传媒网站怎么找 | 中文乱码一二三四有限公司 | 日韩视频高清 | 日韩精品欧美一区二区三区 | 午夜在线播放视频 | 欧美综合伊人久久 | 亚洲综合欧美 | 激情五月六月婷婷 | 久久免费看 | 久一久久 | 欧美电影在线观看网站 | 日韩av免费看 | 久草视频在线资源 | 日韩伦理一区二区三区 |