hibernate表关系

1.一对一

  用户表可以查分成两个表,一个userInfo、一个userLogin表

  实现方式:

(1)使用外键:外键+唯一性约束+非空约束

(2)公用主键:公用主键,从表的主键同时也是外键,来源于主表的主键。

2. 一对多

  使用外键,实现一对多关系,外键可以为null

  主从关系:一:主表,多:从表  ,从表的外键必须是主表的主键或者null。

实现方法:Student     Clazz

step1:在一个一方创建对象引用集合  Set<>

private Set<Student> students = new HashSet<>(0);

step2:在多的一方创建对象引用

private Clazz clazz;

step3:在多方 实体中建立多对一关系-<many-to-one>【由多的一方维护关系】。

  在一方配置<set>标签【可选】

public class Student implements Serializable {
    private Integer id;
    private String stuName;
    private Integer age;
    private Clazz clazz;
    //set,get省略
}

Student.java

public class Clazz implements Serializable {
    private Integer id;
    private String className;

    //实例化,可以防止空指针异常
    private Set<Student> students = new HashSet<>(0); //长度设为0
}

Clazz.java

<hibernate-mapping package="cn.getword.domain">
    <class name="Student" table="tb_student">
        <id name="id" column="id" type="int">
            <generator class="native"></generator>
        </id>
        <property name="stuName" column="username" />
        <property name="age" column="age" />
        <!-- name:用于指定引用对象在类中属性名称
             class:一方的类的路径
             column:外键名称
         -->
        <many-to-one name="clazz" class="Clazz" column="clazz_id" />
    </class>
</hibernate-mapping>

Student.hbm.xml

<hibernate-mapping package="cn.getword.domain">
    <class name="Clazz" table="tb_clazz">
        <id name="id" column="id" type="int">
            <generator class="native"></generator>
        </id>
        <property name="className" column="class_name" />
        <!-- name:引用集合的名称
             table:多方表明
         -->
        <set name="students" table="tb_student">
            <!-- key:多方表的外键名称 -->
            <key column="clazz_id"></key>
            <one-to-many class="Student"></one-to-many>
        </set>
    </class>
</hibernate-mapping>

Clazz.hbm.xml

3. 多对多

  使用中间表实现多对多关系。中间表只有两个字段,即两个表的主键,中间表的主键就是两个外键的联合主键。

end

原文地址:https://www.cnblogs.com/zhuxiang1633/p/9766865.html

时间: 2024-11-07 23:23:43

hibernate表关系的相关文章

六 Hibernate表关系及其配置

Hibernate的一对多关联映射 Hibernate的多对多关联映射 数据库表与表之间的关系:一对多,多对多,一对一 一对多:一个部门对应多个员工,一个员工只能属于一个部门.一个客户对应多个联系人,一个联系人只能属于一个客户 一对多建表:在多的一方创建外键. 多对多:一个学生可以选择多门课程,一门课程可以被多个学生选择.一个用户可以选择多个角色,一个角色可以被多个用户选择. 多对多建表:创建中间表.中间表至少有两个字段分别作为外键指向多对多双方的主键. 一对一(了解): 一般可以建成一张表.

hibernate 表关系映射详解之一对多

一对多 传统模式:jdbc连接数据库的传统模式下,是通过主键连接外键实现一对多关系的映射, 其数据库中表的对应关系是在多方加入一方的主键,而后形成外键连接. Hibernate:引入hibernate框架后,通过类的形式来表示一对多的关系. 举例:订单与订单详细的关系,一个订单包含多个商品,多个商品属于一个订单,两者的关系是一对多的关系. 实现原理: 面向对象实现------ 在order类中加入item类的set集合 ,表示在订单类中包含有多个订单详细(集合表示). 层次结构: 步骤一:编写实

hibernate 表关系映射详解之继承关系

举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前         价格,优惠价格等待,商品可以继承商品类,也可以保有自己的属性,比如说商品名等等.这种关系称为继承. 上文说到继承,那么怎么在数据库中体现继承,以及在hibernate实现继承. 数据库表中体现继承,可以先创建一个商品类表,然后创建一个商品表(类型不定),他们之间拥有同样的主键建立联系. 表结构: 如何在hibernate中实现继承

Hibernate表关系03

一. 一对多映射 1.基本应用 1.1 准备项目 创建项目:hibernate-02-relation 引入jar,同前一个项目 复制实体(客户).映射.配置.工具类 1.2 创建订单表 表名: t_order 语句 1 CREATE TABLE `t_order` ( 2 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', 3 `orderno` varchar(20) DEFAULT NULL COMMENT '订单编号', 4 `pr

hibernate 表关系映射详解之一对一

举例:用户和邮箱的关系,一个用户拥有一个邮箱,一个邮箱属于一个用户 关系图: 实现原理:因为两者皆是一方,无论在那一方加入,都可实现单项映射. 配置文件: 结构图: 实体类: hibernate实现映射一对一中有两种方法. 方法一(通过多对一映射): 步骤一: 在Customer类中加入Email类 步骤二:配置customer类的映射文件  -- > Customer.hbm.xml 本来多对一的映射,加入unique(唯一)之后,就很巧妙的变成一对一的映射,网上说这样的拓展性很好,没试过,这

hibernate 表关系映射详解之多对多

举例:商品类型表与商品表,每种类型对应多个商品,每个商品对应多种类型 关系图: hirbernate实现多对多映射有两种方法,第一种是通过中间表直接映射,第二种是通过中间表间接映射. 直接映射: 配置实体类(因为都是多对多的关系,所以双方都具有set集合): 配置实体类的映射文件: 分析:category类先通过category_Id与中间表tb_category_product建立联系,然后再通过多对多标签中的porduct_id与product类建立多对多联系. product类同上类似.

Hibernate多表关系

Hibernate多表关系 hibernate 一对多(多对一) 创建实体 配置ORM映射文件 创建测试文件 双方关系维护 级联操作 外键的维护权管理 双方关系维护.级联操作.外键维护权之间的关系 一对多(多对一) 在一个视频管理的系统中应该包含这样两个表讲课人Speaker.视频Video.其中一个讲课人可以讲多个视频,而一个视频只能属于一个讲课人:在这里Speaker就是一的状态,Video就是多的状态. 创建实体 在Speaker中添加set集合(如果添加list集合需要在配置文件中额外配

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]

1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package com.rhythmk.model; import java.util.Date; public

Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [One To One]

1.One To One 单相 背景: 古代一个老婆  只能关联一个老公 husband.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.rhythmk.model; public class husband {          public Integer getHusbandId() {         return husbandId;     }     public void setHusba