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

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

一對(duì)多的關(guān)系

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

多對(duì)一關(guān)系

<!-- department 用戶(hù)與部門(mén)的多對(duì)一 -->
<many-to-one name="department" class="Department" column="departmentId">

</many-to-one>
多對(duì)一

多對(duì)多關(guān)系

<!-- users屬性,本類(lèi)與User的多對(duì)多 -->
<set name="users" table="itcast_user_role">
    <key column="roleId"></key>
    <many-to-many class="User" column="userId"></many-to-many>
</set>
<!-- roles屬性,本類(lèi)與Role的多對(duì)多 -->
<set name="roles" table="itcast_user_role">
    <key column="userId"></key>
    <many-to-many class="Role" column="roleId"></many-to-many>
</set>

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

模板實(shí)例

實(shí)體類(lèi)

Department.java

package cn.zzuli.oa.domain;

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

/**
 * 部門(mén)
 * @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;

/**
 * 用戶(hù)
 * @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; // 說(shuō)明

    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;
    }

}

對(duì)應(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的一對(duì)多 -->
        <set name="users">
            <key column="departmentId"></key>
            <one-to-many class="User" />
        </set>

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

        </many-to-one>


        <!-- children 與Department一對(duì)多 -->
        <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屬性,本類(lèi)與User的多對(duì)多 -->
        <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屬性,本類(lèi)與Department的多對(duì)一 -->
        <many-to-one name="department" class="Department" column="departmentId"></many-to-one>

        <!-- roles屬性,本類(lèi)與Role的多對(duì)多 -->
        <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、寫(xiě)注釋

? 格式為:?屬性,表達(dá)的是本對(duì)象與?的?關(guān)系。

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

2、模版

多對(duì)一

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

一對(duì)多

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

多對(duì)多

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

3、填空

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

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

?column屬性:

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

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

?多對(duì)多中的<keycolumn=“..”>:一般可以寫(xiě)成本對(duì)象的名加Id后綴,如本對(duì)象名為User,則寫(xiě)為userId。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容