首页 > 技术文章 > hibernate - 一对多配置

wangzhaoyv 2020-11-22 22:48 原文

说明图

用户表结构(一方)

订单表结构(多方)

{{uploading-image-430713.png(uploading...)}}

用户表(一方)对应的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() {
    }

   //...此处省略getter 和 setter
}

注: 这里的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;
    
    
    //...此处省略getter 和 setter
}

注: 这里的对象不需要实例化,同样需要提供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>

推荐阅读