4.一对多关联映射

1.实体一对多关联

一对多联系(1:n)
定义:
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。
实例:
一个班级中有若干名学生,每个学生只在一个班级中学习。

2.数据库一对多关联

在关系模型中,只存在外键参照关系,而且是 many 方参照 one 方。

3.Hibernate单向一对多关联

在关系模型中,只存在外键参照关系,而且是 many 方参照 one 方。
public class User {
    private Integer id;
    private String userName;
    private String password;
    private Set orderSet = new HashSet<Order>();
    ......
}

public class Order {
    private Integer id;
    private Double price; // 价格
    ......
}
映射配置文件
在 User.hbm.xml 文件中使用 <set>元素配置。

<set name="orderSet" cascade="delete">
    <key column="USERID"/>
    <one-to-many class="Order" />
</set>
<set>元素属性:
name属性:指定要映射的属性名;
cascade级联操作属性:save-update、delete、all、none。
<set>元素的子元素:
<key>元素:column 属性设定所关联类对应表的外键;
<one-to-many>元素:class 属性设定所关联的类。
在表示一对多关联关系时,还可以使用 List 和 Map 来表示引用集合。
public class User {
    private Integer id;
    private String userName;
    private String password;
    private List orderList = new ArrayList<Order>();
    ……
}

使用 List 映射时,需要在 Order 表中添加一个额外字段 (ORDERINDEX) 来表示插入顺序。

在User.hbm.xml文件中使用 <list>元素配置。

<list name="orderList" cascade="delete">
<key column="USERID"/>
<index column="ORDERINDEX"/>
<one-to-many class="Order" />
</list>

<index>子元素:
column 属性:指定 ORDER 表中记录插入顺序的列名。

使用 Map 映射时,需要在 Order 表中添加一个额外字段 (ORDERKEY) 来记录 Map 的 key 值。
<map name="orderMap" cascade="delete">
    <key column="USERID"/>
    <index column="ORDERKEY" type="string"/>
    <one-to-many class="Order" />
</map>

<index>子元素:
column 属性:指定记录 Map 中 key 值得字段名。
type 属性:指定 Map 中 key 值的类型(不可缺省)。

 

4.Hibernate 双向一对多关联

建立 User 和 Order 的双向一对多关联。
在 User 到 Order 单向一对多关联关系基础上,在 Order 类中增加 User 类型的属性。

public class Order {
    private Integer id;
    private Double price; // 价格
    private User user;
    ......
}
Order.hbm.xml 中添加 user 属性的映射。
<many-to-one name="user" column="USERID" class="User"/>
<many-to-one>元素的属性:
name 属性:指定需映射的属性名;
column 属性:指定ORDER中的外键列名;
class 属性:指定所关联的类型。

使用注解映射一对多关联:

在 many 方 Order类 的 getUser() 方法上配置。
@ManyToOne
@JoinColumn(name="USERID")
public User getUser() {
    return user;
}

@JoinColumn(name = "USERID") : 指定 ORDER 表中的外键列名。
在 one 方 User类 的 getOrderSet() 方法上配置。
@OneToMany(mappedBy="user", targetEntity=Order.class,
        cascade=CascadeType.ALL)
public Set getOrderSet() {
    return orderSet;
}

mappedBy:表明是双向关联关系,并且与 user 建立对应。
targetEntity:指定了所关联的类型。
cascade:指定级联操作。

原文地址:https://www.cnblogs.com/Firesun/p/9844580.html

时间: 2024-10-15 07:11:33

4.一对多关联映射的相关文章

hihernate一对多关联映射

一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 举个例子员工和老板.你说是老板记员工比较容易还是员工记老板比较容易呢?很明显记少的比较容易啊,能维护二者的关系也能减少工作量.hibernate当然也是这么做的. 也就是说一对多和多对一的映射策略是一样的,只是站的角度不同 在关系型数据库理论中,"多对一"关联同于"一对多"关联

【SSH系列】Hibernate映射 -- 一对多关联映射

    映射原理       一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入一个外键,指向一的一段,关联关系都是在多的一端进行维护,只是我们在写映射的时候发生了变化.       一对多和多对一的映射原理是一样的,但是她们之间也存在着小小的区别,毕竟世界上没有两片完全相同的叶子,她们之间的区别就是维护的关系不同,我们先来看多对一,多端维护一端的关系,在加载多端的时候,可以将一端

【SSH进阶之路】Hibernate映射——一对多关联映射(七)

上上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息. 上篇博文[SSH进阶之路]Hibernate映射--一对一双向关联映射(六),双向关联映射解决了单向关联映射只能从一端加载信息的缺陷,当然,双向关联映射并不影响存储,只影响加载.下面我们开始今天的内容: 一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,

hibernate之关于使用连接表实现一对多关联映射

[Hibernate]之关于使用连接表实现一对多关联映射 基于中间表实现的一对多的关联映射,还是比较常见的. Person(人)和Group(组) Annotations配置 @Entity @Table(name="t_group") publicclass Group {     private Integer id;     private String name;     private Set<Person> persons=newHashSet<Perso

一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)

上篇博客已经采用jpa注解来实现了一对多关联映射,将这种关联映射以外键的形式处理,现在来看看怎么以第三张表的形式处理.采用jpa注解来映射数据库要使用的jar包见上篇博客: 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一) 现在看第二种方式:以第三张表的关系来体现 Group.java package com.tgb.zhudan; import java.util.List; import javax.persistence.CascadeType; import j

Hibernate一对多关联映射的配置及其级联删除问题

首先举一个简单的一对多双向关联的配置: 一的一端:QuestionType类 package com.exam.entity; import java.util.Set; public class QuestionType { private String typeName; private char typeUniqueness; private Set quesion; public String getTypeName() { return typeName; } public void

014 一对多关联映射 单向(one-to-many)

在对象模型中,一对多的关联关系,使用集合来表示. 实例场景:班级对学生:Classes(班级)和Student(学生)之间是一对多的关系. 多对一.一对多的区别: 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一的. 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多的. 两者使用的策略是一样的,只是各自所站的角度不同. Classes实体类: public class Classes { private int id; private Stri

一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一)

JPA(Java Persistence API)是Sun官方提出的一种Java持久化规范.为Java开发人员提供了一种对象/关系映射工具,管理Java应用中的关系数据.JPA的总体思想和现有Hibernate.TopLink等ORM框架大体一致.总的来说,JPA包括以下3方面的技术: 第一:ORM映射元数据 JPA支持XML和JDK 注释(也可译作注解)两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中. 第二:Java持久化API 用来操作实体对象,执行

Mybatis 配置resultMap一对多关联映射

resultMap配置: 引用: PO类: 接口: 测试: public class UserMapperTest { private SqlSessionFactory sqlSessionFactory = null; @Before public void init() throws Exception { // 第一步:创建一个SQLSessionFactoryBuilder对象. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = n