一对多关系可以分为单向和双向。

一对多关系单向

单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表)。比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键。母亲与孩子的关系就是一对多的关系。如果想对母亲信息的操作同时也反应在其孩子信息上那么可以在母亲类配置文件的集合属性上配置cascade="all",表示对关联实体进行级联更新配置。

“主”端: 多的一端

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.java1234.model"> <class name="Student" table="t_student">
<id name="id" column="stuId">
<generator class="native"></generator>
</id>
<!-- 多的一端// column 数据中的别名 cascade 表示级联关系 通常用在多对一 ,和多对多的映射中 -->
<property name="name"></property>
<many-to-one name="c" class="com.java1234.model.Clazz" column="ClazzId"></many-to-one>
</class> </hibernate-mapping>

一的一端:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.java1234.model"> <class name="Clazz" table="t_clazz">
<id name="id" >
<generator class="native"></generator>
</id> <property name="name" column="clazzName"></property>
</class> </hibernate-mapping>

一对多单向映射:多对一的映射关系是在多的一端进行维护的,一对多关系映射则由一端来维护这种关系。

“主”端:一的一端来维护这种关系 ,用set标签 在t_student的表中添加字段ClazzId来进行关联。

一对多关联映射利用了多对一关联映射原理:

多对一关联映射:在多的一端加入外键指向一的一端,他维护的关系是多指向一

一对多关联映射: 在多的一端加入外键指向一的一端,它维护的关系是一指向多

也就是说一对多和多对一的映射策略是一样的,只是站的角度不同。

在一的一端维护的关系的缺点: 如果经t_student 表里面的clazzId 字段设为非空,则无法保存。

一对多双向

一对多双向。在双向关联时每个Student都有一个clazz的引用,所以在配置clazz.hbm.xml文件时有些不同

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.java1234.model"> <class name="Clazz" table="t_clazz">
<id name="id" column="clazzId">
<generator class="native"></generator>
</id> <property name="name" column="className"></property> <set name="students" cascade="all" inverse="true">
<!-- cascade 有五个选项 分别是:all ,delete ,none,save-update,delete-orphan ;
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
delete-orphan: 当save/update/saveOrUpdate时,相当于save-update
;当删除操作时,相当于delete ; -->
<key column="clazzId"></key>
<one-to-many class="com.java1234.model.Student" />
</set>
</class> </hibernate-mapping>

在一一端的集合上使用<set>,在对方表中加入一个外键指向一一端。

在多的一端要采用<many-to-one>标签

java框架篇---hibernate(一对多)映射关系的更多相关文章

  1. java框架篇---hibernate(多对多)映射关系

    以学生和老师为例的来讲解多对多映射. 实体类: Student package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import ...

  2. java框架篇---hibernate之缓存机制

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  3. java框架篇---hibernate入门

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...

  4. java框架篇---hibernate(一对一)映射关系

    对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本质上就是将数据从 ...

  5. java框架篇---hibernate之session状态

    Session接口是Hibernate向程序提供操纵数据库的最主要接口,是单线程对象,它提供了基本的保存.更新.删除和查询方法.它有一个缓存,保存了持久化对象,当清理缓存时,按照这些持久化对象同步更新 ...

  6. java框架篇---hibernate之CRUD操作

    CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...

  7. java框架篇---hibernate之连接池

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在配置连接池时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hiber ...

  8. java框架篇---hibernate主键生成策略

    Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...

  9. Hibernate中的映射关系(一对多)

    在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...

随机推荐

  1. Windows10下 tensorflow-gpu 配置

    引言 越来越多的的人入坑机器学习,深度学习,tensorflow 作为目前十分流行又强大的一个框架,自然会有越来越多的新人(我也刚入门)准备使用,一般装的都是 CPU 版的 tensorflow,然而 ...

  2. 模拟页面获取的php数据(二)

    <?php return [ "aData" => [//通勤方式 "trafficType" => [ 0 => [ "ty ...

  3. Nowcoder 提高 Day1

    比赛链接 A 中位数(前缀和 二分) 额,确实没想到逼近... 然后写了n^2log的暴力,还CE了 只需要判断是否能有大于当前mid的中位数就好 这显然是可以二分的 代码 #include<b ...

  4. Python3NumPy——ndarray对象

    Python3NumPy——ndarray对象 1.前沿 推荐导入语法:import numpy as np NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象 2.创 ...

  5. 潭州课堂25班:Ph201805201 WEB 之 CSS 第三课 (课堂笔记)

    在 CSS 中第个标签都可以认为是个盒子,盒子就有以下几层 边框 border border-top: 5px solid black; /*上边框 实线*/ border-right: 3px do ...

  6. BZOJ1166 : [Baltic2008]Magical Stones

    考虑二分答案,转化为求有多少$\leq lim$的数满足条件. 从两侧往中间进行数位DP,设$f[l][r][j][x][y][z][pre][suf]$表示当前准备填的两个位置是$l$和$r$,已经 ...

  7. C# 添加动态属性

    1.ExpandoObject(System.Dynamic) 2.JObject(Newtonsoft.Json.Linq)

  8. bat遍历目录

    方法一: for /r  D:\要遍历的目录\  %%i  (*.exe)  do ( echo  %%i ) 方法二: set DestPath=D:\你的目录\ rem 你的后缀 set Dest ...

  9. VS2010链接TFS遇见错误:TF204017,没有访问工作区域,需要一个或者多个必须权限

    最近刚刚搭建好服务器,然后准备将VSS源代码迁移到TFS源代码管理服务器上面.在我本机先用的服务器帐号来上传初始化源代码数据库,然后我又用自己的帐号进行迁出代码的时候发生的异常. 造成上述错误,主要是 ...

  10. mysql yum安装

    # 下载yum源的rpm包wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm# 安装rpm包rpm - ...