Hibernate多對一單項(xiàng)關(guān)聯(lián)
概念
基本映射是對一個(gè)實(shí)體進(jìn)行映射,關(guān)聯(lián)映射就是處理多個(gè)實(shí)體之間的關(guān)系,將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫中,所謂的關(guān)聯(lián)關(guān)系在對象模型中有一個(gè)或多個(gè)引用。
分類

關(guān)聯(lián)關(guān)系分為上述七種,但是由于相互之間有各種關(guān)系,可以簡化,例如:多對一與一對多映射,只是側(cè)重的角度不對而已。
映射技巧
映射技巧是小編寫映射文件的過程,總結(jié)的經(jīng)典內(nèi)容,總共分為四步,咋看不是特別易懂,但是效果很好。下面我們以實(shí)例看技巧。
(1)寫注釋
解釋:在寫映射文件之前先寫注釋,將問號的地方填上相應(yīng)的內(nèi)容。例如:<!-- group屬性,表達(dá)的是本對象(User)與Group的多對一的關(guān)系-->
(2)寫映射的框架(拷模版)
|
多對一
|
<many-to-one name=“” class=“” column=“”/>
|
|
一對多
(Set)
|
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set>
|
|
多對多
(Set)
|
<set name="" table="">
<key column=""></key>
<many-to-many class="" column=""/>
</set>
|
(3)填空
填空,就是將映射的框架信息,填寫完成,完成映射文件。
• name屬性:屬性名(注釋中的第1問號)
• class屬性:關(guān)聯(lián)的實(shí)體類型(注釋中的第2個(gè)問號)
• column屬性:
○ <many-to-one column="..">:一般可以寫成屬性名加Id后綴,如屬性為group,則column值寫成groupId。
○ 一對多中的<key column="..">:從關(guān)聯(lián)的對方(對方是多對一)映射中把column值拷貝過來。
○ 多對多中的<key column=“..”>:一般可以寫成本對象的名加Id后綴,如本對象名為User,則寫為userId。
○ 多對多中的<many-to-many column=“..”>:一般可以寫為關(guān)聯(lián)對象的名稱加Id后綴。
(4)完成
將映射文件添加到hibernate.hbm.xml中,這個(gè)相信大家都知道為什么。
我們后面所有關(guān)聯(lián)映射的博文都使用此映射技巧來寫映射文件,明白之后,速度會(huì)非???。
多對一關(guān)聯(lián)映射
映射原理
多的一端維護(hù)關(guān)聯(lián)關(guān)系,在“多”的一端加入一個(gè)外鍵,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外鍵,指向“一”的一端。
實(shí)例
比如,多個(gè)用戶屬于同一組,我們從對象模型和關(guān)系模型兩個(gè)角度來分析一下這個(gè)例子,如下:

從上圖可以看出,對象模型具有方向性,通過用戶(User)可以看到組(Group),但是不能反過來。用戶和組各對應(yīng)一張數(shù)據(jù)庫表,聚合關(guān)系需要一個(gè)外鍵(groupid)來表示,最后生成的表如下所示:

作用:
當(dāng)我拿到用戶時(shí)直接就可以拿到用戶的組,hibernate在訪問多的一端時(shí),可以自動(dòng)的加載關(guān)聯(lián)對象。對于用戶(User)來說,它的關(guān)聯(lián)對象是組(group)。
上面都是多對一關(guān)聯(lián)映射的基本原理,以及相應(yīng)的實(shí)例,下面我們看一下代碼:
代碼
User類
public class User {
private int id;
private String name;
private Group group;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
Group類
public class Group {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
User.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.liang.hibernate"> <class name="User" table="t_user"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <!-- group屬性,表達(dá)的是本對象與Group的多對一的關(guān)系--> <many-to-one name="group" class="Group" column="groupid"></many-to-one> <!-- 解釋: 多對一關(guān)系標(biāo)簽: <many-to-one name=“” class=“” column=“”/> 1、第1個(gè)問號:group是User類的屬性,對應(yīng)于name屬性名 2、第2個(gè)問號:class表達(dá)的是本對象(User)與Group的關(guān)系 3、第3個(gè)問號:column是屬性名+Id 當(dāng)我們寫完注釋之后,我們直接拷貝問號的對應(yīng)關(guān)系即可。 --> </class> </hibernate-mapping>
Group.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.liang.hibernate.Group" table="t_group"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> </class> </hibernate-mapping>
生成的表結(jié)構(gòu),與上面的分析的關(guān)系模型一樣:

項(xiàng)目中,多對一關(guān)聯(lián)映射是最常見的映射,但它是Hibernate的關(guān)聯(lián)映射中最簡單的一種映射關(guān)系
總結(jié)
以上所述是小編給大家介紹的Hibernate多對一單項(xiàng)關(guān)聯(lián),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
JAVA中時(shí)間戳與LocalDateTime互相轉(zhuǎn)換代碼例子
最近在編碼過程中遇到將時(shí)間戳轉(zhuǎn)化為 LocalDateTime,所以這里給總結(jié)下,這篇文章主要給大家介紹了關(guān)于JAVA中時(shí)間戳與LocalDateTime互相轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2023-11-11
Xml中使用foreach遍歷對象實(shí)現(xiàn)代碼
這篇文章主要介紹了Xml中使用foreach遍歷對象實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
java利用注解實(shí)現(xiàn)簡單的excel數(shù)據(jù)讀取
這篇文章主要為大家詳細(xì)介紹了java利用注解實(shí)現(xiàn)簡單的excel數(shù)據(jù)讀取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
SpringMVC 方法四種類型返回值總結(jié)(你用過幾種)
這篇文章主要介紹了SpringMVC 方法四種類型返回值總結(jié)(你用過幾種),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
SpringBoot自動(dòng)裝配Condition的實(shí)現(xiàn)方式
這篇文章主要介紹了SpringBoot自動(dòng)裝配Condition的實(shí)現(xiàn)方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08

