Hibernate中表與表的關(guān)系模板

Hibernate中表與表的關(guān)系模板代碼

一對多的關(guān)系

<!-- users屬性 與User的一對多 -->
<set name="users">
    <key column="departmentId"></key>
    <one-to-many class="User" />
</set>
一對多

多對一關(guān)系

<!-- department 用戶與部門的多對一 -->
<many-to-one name="department" class="Department" column="departmentId">

</many-to-one>
多對一

多對多關(guān)系

<!-- users屬性咕别,本類與User的多對多 -->
<set name="users" table="itcast_user_role">
    <key column="roleId"></key>
    <many-to-many class="User" column="userId"></many-to-many>
</set>
<!-- roles屬性益咬,本類與Role的多對多 -->
<set name="roles" table="itcast_user_role">
    <key column="userId"></key>
    <many-to-many class="Role" column="roleId"></many-to-many>
</set>

需要第三表來維護(hù)

模板實(shí)例

實(shí)體類

Department.java

package cn.zzuli.oa.domain;

import java.util.HashSet;
import java.util.Set;

/**
 * 部門
 * @author LZH
 * @date 2017年2月23日
 */
public class Department {
    private Long id;
    private Set<User> users = new HashSet<User>();
    private Department parent;
    private Set<Department> children = new HashSet<Department>();

    private String name;
    private String description;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

    public Department getParent() {
        return parent;
    }

    public void setParent(Department parent) {
        this.parent = parent;
    }

    public Set<Department> getChildren() {
        return children;
    }

    public void setChildren(Set<Department> children) {
        this.children = children;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

Role.java

package cn.zzuli.oa.domain;

import java.util.HashSet;
import java.util.Set;

/**
 * 崗位
 * @author LZH
 * @date 2017年2月23日
 */
public class Role {
    private Long id;
    private String name;
    private String description;
    private Set<User> users = new HashSet<User>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

}

User.java

package cn.zzuli.oa.domain;

import java.util.HashSet;
import java.util.Set;

/**
 * 用戶
 * @author LZH
 * @date 2017年2月23日
 */
public class User {
    private Long id;
    private Department department;
    private Set<Role> roles = new HashSet<Role>();

    private String loginName; // 登錄名
    private String password; // 密碼
    private String name; // 真實(shí)姓名
    private String gender; // 性別
    private String phoneNumber; // 電話號(hào)碼
    private String email; // 電子郵件
    private String description; // 說明

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

對應(yīng)配置文件

Department.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.zzuli.oa.domain">

    <class name="Department" table="department">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>

        <property name="name" column="name"></property>
        <property name="description" column="description"></property>

        <!-- users屬性 與User的一對多 -->
        <set name="users">
            <key column="departmentId"></key>
            <one-to-many class="User" />
        </set>

        <!-- parent屬性 與Department多對一 -->
        <many-to-one name="parent" class="Department" column="parentId">

        </many-to-one>


        <!-- children 與Department一對多 -->
        <set name="children">
            <key column="parentId"></key>
            <one-to-many class="Department" />
        </set>

    </class>

</hibernate-mapping>

Role.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="cn.itcast.oa.domain">

    <class name="Role" table="itcast_role">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <property name="description"/>
        
        <!-- users屬性,本類與User的多對多 -->
        <set name="users" table="user_role">
            <key column="roleId"></key>
            <many-to-many class="User" column="userId"></many-to-many>
        </set>
        
    </class>
    
</hibernate-mapping>

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="cn.itcast.oa.domain">

    <class name="User" table="itcast_user">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="loginName"/>
        <property name="password"/>
        <property name="name"/>
        <property name="gender" />
        <property name="phoneNumber"/>
        <property name="email"/>
        <property name="description"/>
        
        <!-- department屬性未蝌,本類與Department的多對一 -->
        <many-to-one name="department" class="Department" column="departmentId"></many-to-one>

        <!-- roles屬性寄锐,本類與Role的多對多 -->
        <set name="roles" table="user_role">
            <key column="userId"></key>
            <many-to-many class="Role" column="roleId"></many-to-many>
        </set>
        
    </class>
    
</hibernate-mapping>

數(shù)據(jù)表模型

數(shù)據(jù)表模型

總結(jié):

圖片總結(jié)

1击蹲、寫注釋

? 格式為:缤骨?屬性,表達(dá)的是本對象與?的份汗?關(guān)系盈电。

? 例:“department屬性,本對象與Department的多對一”

2杯活、模版

多對一

<many-to-one name="" class="" column=""/>

一對多

<set name="">
        <key column=""></key>
        <one-to-many class=""/>
</set>

多對多

<set name="" table="">
        <key column=""></key>
        <many-to-many class="" column=""/>
</set>

3匆帚、填空

?name屬性:屬性名(注釋中的第1問號(hào))

?class屬性:關(guān)聯(lián)的實(shí)體類型(注釋中的第2個(gè)問號(hào))

?column屬性:

?<many-to-onecolumn="..">:一般可以寫成屬性名加Id后綴,如屬性為department旁钧,則column值寫成departmentId吸重。

?一對多中的<keycolumn="..">:從關(guān)聯(lián)的對方(對方是多對一)映射中把column值拷貝過來。

?多對多中的<keycolumn=“..”>:一般可以寫成本對象的名加Id后綴歪今,如本對象名為User嚎幸,則寫為userId。

?多對多中的<many-to-manycolumn=“..”>:一般可以寫為關(guān)聯(lián)對象的名稱加Id后綴寄猩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫉晶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子田篇,更是在濱河造成了極大的恐慌替废,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泊柬,死亡現(xiàn)場離奇詭異椎镣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兽赁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門状答,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刀崖,你說我怎么就攤上這事惊科。” “怎么了蒲跨?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵译断,是天一觀的道長授翻。 經(jīng)常有香客問我或悲,道長,這世上最難降的妖魔是什么堪唐? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任巡语,我火速辦了婚禮,結(jié)果婚禮上淮菠,老公的妹妹穿的比我還像新娘男公。我一直安慰自己,他們只是感情好合陵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布枢赔。 她就那樣靜靜地躺著澄阳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踏拜。 梳的紋絲不亂的頭發(fā)上碎赢,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音速梗,去河邊找鬼肮塞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姻锁,可吹牛的內(nèi)容都是我干的枕赵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼位隶,長吁一口氣:“原來是場噩夢啊……” “哼拷窜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钓试,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤装黑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弓熏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恋谭,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年挽鞠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疚颊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡信认,死狀恐怖材义,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫁赏,我是刑警寧澤其掂,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站潦蝇,受9級特大地震影響款熬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攘乒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一贤牛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧则酝,春花似錦殉簸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽武鲁。三九已至,卻和暖如春蝠检,著一層夾襖步出監(jiān)牢的瞬間洞坑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工蝇率, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迟杂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓本慕,卻偏偏與公主長得像排拷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子锅尘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容