您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關利用Hibernate怎么實現一個多對一單項關聯,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
概念
基本映射是對一個實體進行映射,關聯映射就是處理多個實體之間的關系,將關聯關系映射到數據庫中,所謂的關聯關系在對象模型中有一個或多個引用。
分類
關聯關系分為上述七種,但是由于相互之間有各種關系,可以簡化,例如:多對一與一對多映射,只是側重的角度不對而已。
映射技巧
映射技巧是小編寫映射文件的過程,總結的經典內容,總共分為四步,咋看不是特別易懂,但是效果很好。下面我們以實例看技巧。
(1)寫注釋
解釋:在寫映射文件之前先寫注釋,將問號的地方填上相應的內容。例如:<!-- group屬性,表達的是本對象(User)與Group的多對一的關系-->
(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屬性:關聯的實體類型(注釋中的第2個問號)
• column屬性:
○ <many-to-one column="..">:一般可以寫成屬性名加Id后綴,如屬性為group,則column值寫成groupId。
○ 一對多中的<key column="..">:從關聯的對方(對方是多對一)映射中把column值拷貝過來。
○ 多對多中的<key column=“..”>:一般可以寫成本對象的名加Id后綴,如本對象名為User,則寫為userId。
○ 多對多中的<many-to-many column=“..”>:一般可以寫為關聯對象的名稱加Id后綴。
(4)完成
將映射文件添加到hibernate.hbm.xml中,這個相信大家都知道為什么。
我們后面所有關聯映射的博文都使用此映射技巧來寫映射文件,明白之后,速度會非常快。
多對一關聯映射
映射原理
多的一端維護關聯關系,在“多”的一端加入一個外鍵,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外鍵,指向“一”的一端。
實例
比如,多個用戶屬于同一組,我們從對象模型和關系模型兩個角度來分析一下這個例子,如下:
從上圖可以看出,對象模型具有方向性,通過用戶(User)可以看到組(Group),但是不能反過來。用戶和組各對應一張數據庫表,聚合關系需要一個外鍵(groupid)來表示,最后生成的表如下所示:
作用:
當我拿到用戶時直接就可以拿到用戶的組,hibernate在訪問多的一端時,可以自動的加載關聯對象。對于用戶(User)來說,它的關聯對象是組(group)。
上面都是多對一關聯映射的基本原理,以及相應的實例,下面我們看一下代碼:
代碼
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屬性,表達的是本對象與Group的多對一的關系--> <many-to-one name="group" class="Group" column="groupid"></many-to-one> <!-- 解釋: 多對一關系標簽: <many-to-one name=“” class=“” column=“”/> 1、第1個問號:group是User類的屬性,對應于name屬性名 2、第2個問號:class表達的是本對象(User)與Group的關系 3、第3個問號:column是屬性名+Id 當我們寫完注釋之后,我們直接拷貝問號的對應關系即可。 --> </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>
生成的表結構,與上面的分析的關系模型一樣:
項目中,多對一關聯映射是最常見的映射,但它是Hibernate的關聯映射中最簡單的一種映射關系
上述就是小編為大家分享的利用Hibernate怎么實現一個多對一單項關聯了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。