1. 程式人生 > 實用技巧 >hibernate - 一對多配置

hibernate - 一對多配置

說明圖

使用者表結構(一方)

訂單表結構(多方)

使用者表(一方)對應的javaBean

package com.web.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class User implements Serializable {
     private String uid;
     private String username;
    private String password;
    private String name;
    
private String email; private Long telephone; private String birthday; private String sex; private Integer state; private Integer code; //相對於訂單表來說,使用者表屬於一方 //一個使用者可以擁有多個訂單 //所以使用者這邊配置為Set集合(一個使用者裝多個訂單) //注:這裡的Set集合需要手動初始化 private Set<Orders> orderList = new HashSet<>();
public User() { } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }
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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Long getTelephone() { return telephone; } public void setTelephone(Long telephone) { this.telephone = telephone; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Set<Orders> getOrderList() { return orderList; } public void setOrderList(Set<Orders> orderList) { this.orderList = orderList; } }
注: 這裡的Set集合需要手動初始化,並且提供get set方法 訂單表(多方)對應的JavaBean
package com.web.entity;

import java.io.Serializable;
import java.util.*; 

//對於使用者來說     訂單屬於一對多  中的  多方 
public class Orders implements Serializable {

    private String oid;
    private Date ordertime;
    private Double total;

    private Integer state = 0;
    private String address;
    private String name;

    private String telephone;

    //相對於使用者表來說,訂單表屬於多方
    //多個訂單可以被一個使用者擁有
    //所以訂單這邊配置為使用者物件
    //注:這裡的物件不需要例項化
    private User user;

    public String getOid() {
        return oid;
    }

    public void setOid(String oid) {
        this.oid = oid;
    }

    public Date getOrdertime() {
        return ordertime;
    }

    public void setOrdertime(Date ordertime) {
        this.ordertime = ordertime;
    }

    public Double getTotal() {
        return total;
    }

    public void setTotal(Double total) {
        this.total = total;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

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

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }


    public Set<OrderItem> getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(Set<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
注: 這裡的物件不需要例項化,同樣需要提供get set方法 使用者對應的配置檔案(一方)
                <?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping> 
    <class name="com.web.entity.User" table="user"> 
         <id name="uid" column="uid"> 
             <generator class="uuid"></generator>
         </id> 
        <property name="username" column="username"></property>
        <property name="password" column="password"></property>
        <property name="name" column="name"></property>
        <property name="email" column="email"></property>
        <property name="telephone" column="telephone"></property>
        <property name="birthday" column="birthday"></property>
        <property name="sex" column="sex"></property>
        <property name="state" column="state"></property>
        <property name="code" column="code"></property> 

        <!--
           set標籤:配置集合
           name屬性:表示javaBean中集合的名稱 
           cascade屬性:級聯操作,具體檢視《級聯操作  放棄維護外來鍵》    
        -->
        <set name="orderList" cascade="save-update">
            <!--
               key標籤:配置外來鍵
               column屬性:外來鍵的欄位[由多方表(orders)提供]
            -->
            <key column="oid"></key>
            <!--
                one-to-many標籤:配置多方javaBean檔案位置,操作配置
                class屬性:外來鍵表的全路徑       
            -->
            <one-to-many class="com.web.entity.Orders" ></one-to-many>
        </set>

    </class>
</hibernate-mapping>

訂單對應的配置檔案(多方)
   <?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
    <class name="com.web.entity.Orders" table="orders">
        <id name="oid" column="oid">
            <generator class="uuid"></generator>
        </id>

        <property name="ordertime" column="ordertime"></property>
        <property name="total" column="total"></property>
        <property name="state" column="state"></property>
        <property name="address" column="address"></property>


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

        <!--
              many-to-one標籤:配置一方的javaBean檔案位置,操作配置
              name屬性: 當前javaBean中的屬性
              class屬性:屬性的全路徑名
              column屬性:外來鍵的欄位
              cascade屬性:級聯操作,具體檢視《級聯操作  放棄維護外來鍵》  
         -->
        <many-to-one name="user" class="com.web.entity.User" column="uid" cascade="save-update"></many-to-one>
    </class>
</hibernate-mapping>

說明圖 使用者表結構(一方) 訂單表結構(多方) 使用者表(一方)對應的javaBean package com.web.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class User implements Serializable { private String uid; private String username; private String password; private String name; private String email; private Long telephone; private String birthday; private String sex; private Integer state; private Integer code; //相對於訂單表來說,使用者表屬於一方 //一個使用者可以擁有多個訂單 //所以使用者這邊配置為Set集合(一個使用者裝多個訂單) //注:這裡的Set集合需要手動初始化 private Set<Orders> orderList = new HashSet<>(); public User() { } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Long getTelephone() { return telephone; } public void setTelephone(Long telephone) { this.telephone = telephone; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Set<Orders> getOrderList() { return orderList; } public void setOrderList(Set<Orders> orderList) { this.orderList = orderList; } } 注: 這裡的Set集合需要手動初始化,並且提供get set方法 訂單表(多方)對應的javaBean package com.web.entity; import java.io.Serializable; import java.util.*; //對於使用者來說 訂單屬於一對多 中的 多方 public class Orders implements Serializable { private String oid; private Date ordertime; private Double total; private Integer state = 0; private String address; private String name; private String telephone; //相對於使用者表來說,訂單表屬於多方 //多個訂單可以被一個使用者擁有 //所以訂單這邊配置為使用者物件 //注:這裡的物件不需要例項化 private User user; public String getOid() { return oid; } public void setOid(String oid) { this.oid = oid; } public Date getOrdertime() { return ordertime; } public void setOrdertime(Date ordertime) { this.ordertime = ordertime; } public Double getTotal() { return total; } public void setTotal(Double total) { this.total = total; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public Set<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(Set<OrderItem> orderItems) { this.orderItems = orderItems; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } 注: 這裡的物件不需要例項化,同樣需要提供get set方法 使用者對應的配置檔案(一方) <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.web.entity.User" table="user"> <id name="uid" column="uid"> <generator class="uuid"></generator> </id> <property name="username" column="username"></property> <property name="password" column="password"></property> <property name="name" column="name"></property> <property name="email" column="email"></property> <property name="telephone" column="telephone"></property> <property name="birthday" column="birthday"></property> <property name="sex" column="sex"></property> <property name="state" column="state"></property> <property name="code" column="code"></property> <!-- set標籤:配置集合 name屬性:表示javaBean中集合的名稱 cascade屬性:級聯操作,具體檢視《級聯操作 放棄維護外來鍵》 --> <set name="orderList" cascade="save-update"> <!-- key標籤:配置外來鍵 column屬性:外來鍵的欄位[由多方表(orders)提供] --> <key column="oid"></key> <!-- one-to-many標籤:配置多方javaBean檔案位置,操作配置 class屬性:外來鍵表的全路徑 --> <one-to-many class="com.web.entity.Orders" ></one-to-many> </set> </class> </hibernate-mapping> 訂單對應的配置檔案(多方) <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.web.entity.Orders" table="orders"> <id name="oid" column="oid"> <generator class="uuid"></generator> </id> <property name="ordertime" column="ordertime"></property> <property name="total" column="total"></property> <property name="state" column="state"></property> <property name="address" column="address"></property> <property name="name" column="name"></property> <property name="telephone" column="telephone"></property> <!-- many-to-one標籤:配置一方的javaBean檔案位置,操作配置 name屬性: 當前javaBean中的屬性 class屬性:屬性的全路徑名 column屬性:外來鍵的欄位 cascade屬性:級聯操作,具體檢視《級聯操作 放棄維護外來鍵》 --> <many-to-one name="user" class="com.web.entity.User" column="uid" cascade="save-update"></many-to-one> </class> </hibernate-mapping>