Hibernate关联关系 1.1. 一对一 1.1.1. 背景 1.1.2. 准备 1.1.3. 单向外键关联 1.1.3.1. 通过丈夫访问妻子 1.1.3.2....总结 Hibernate关联关系 一对一 背景 在中国一个丈夫只能有一个妻子,那么丈夫和妻子的关系就是一对一的关系 准备 创建丈夫和妻子的实体类 丈夫的实体类 @Entity @Table(name...但是在后面讲到级联操作,那么就可以直接保存husband对象便可以一起保存了wife对象数据到数据库中 import org.hibernate.Session; import org.hibernate.Transaction...=null) { session.close(); } } } /** * 测试修改操作: 这里我们修改id=1的Husband对应的妻子的信息为id=2,当然前提是id=2...DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net.../hibernate-mapping-3.0.dtd" > 3:把配置加入到hibernate.cfg.xml中 4:创建一个方法使关联工作...Event.class, eventid); aPerson.getEvents().add(aEvent); session.getTransaction().commit(); } 注意Hibernate
Hibernate关联关系映射 1.1....DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” “http://hibernate.sourceforge.net.../hibernate-mapping-3.0.dtd”> <!...DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” “http://hibernate.sourceforge.net.../hibernate-mapping-3.0.dtd”> <!
Hibernate关联查询 1.1. 关联查询之延迟加载(lazy) 1.1.1. 什么是延迟加载 1.1.2. 什么是关联查询的延迟加载 1.1.3. 一对一 1.1.3.1....多对多 Hibernate关联查询 关联查询之延迟加载(lazy) 什么是延迟加载 前面单独讲过延迟加载就是在根据id查询获取的对象中只是有一个id的属性值,只有当使用其他属性的时候才会发出sql语句查询数据库...,session.load(Class cls,id)就是这个原理 什么是关联查询的延迟加载 简单的说就是在关联关系中,根据id查询对象的时候仅仅发出sql语句查询的是当前的实体类的表,并没有查询另外一张表的数据...=null) { session.close(); } } 测试懒加载 需要在@OneToOne注解中添加fetch属性,我们测试单向外键关联的懒加载(通过Husband类访问Wife...多对多 多对多的关联查询默认使用的懒加载(LAZY) 如果想要设置饿汉式加载,可以使用@ManyToMany(fetch=FetchType.EAGER),这里就不在演示了 如果在双向外键关联中都要饿汉式加载
ORM的实现思想就是将关系型数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。...Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。...接下来让我们一起走进Hibernate的几种关联映射关系: 单向一对一关联映射(one-to-one): 两个对象之间一对的关系,例如:Person(人)- IdCard(身份证) 有两种策略可以实现一对一的关联映射...-- one-to-one指示hibernate如何加载其关联对象,默认根据主键加载 也就是拿到关系字段值,根据对端的主键来加载关联对象 -->...> 注意:因为一对一的主键关联映射扩展性不好,当我们的需要发生改变想要将其变为一对多的时候变无法操作了,所以我们遇到一对一关联的时候经常会采用唯一外键关联来解决问题,而很少使用一对一主键关联。
(2)双向关联 指具有关系关联的实体对象间的加载与访问时双向的,即,任何一方均可加载和访问另一方。 四丶级联操作 级联操作分为:级联保存,级联删除,级联更新.........五丶关联关系维护 (1)Java代码上的关联关系维护 通过实体类来维护 (2)数据库上的关联关系维护 通过外键来维护 当我们操作数据(例如插入save)的时候都会先操作对方表的数据: 如果我们插入的是单方的数据...说了那么多我们接下来就来使用Hibernate实现这些关联: 六丶一对多单向关联(“一”能加载和访问“多”) 第一步: 创建两个关联的实体类 //Employee实体类 public class Employee...我们都知道多对多关系在数据库中是通过中间表来完成它们之间的关联的,那么Hibernate怎么关联,我们接着往下看: //学生实体类 public class Student { private...双向关联,双方都可以维护关联关系 到这儿我们的关联关系映射就结束了,当然我们Hibernate的只是还没学完,未完待续. 如果错误,不吝赐教。
什么是关联(association) 1、关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。...2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 关联是有方向的 关联的关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 在订单实体类中需要添加两个属性...,: 1、hibernate配置了关联关系 2、当操作数据的时候,两个关联对象被hibernate管理起来, 3、两个对象之间必须建立关联关系 查询数据测试 @Override public...省去了我们以前的链接查询的操作。...`roleId`) ON DELETE NO ACTION ON UPDATE NO ACTION) 解决方案:在数据库里更改user_role表结构,就是添加约束,就添加roleId的删除时进行级联操作
但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?...本篇主要介绍的关联映射就是针对有着某种关联的多张表的各种操作,主要涉及内容如下: 组合主键的映射 组件的映射 单向多对一的映射 单向一对多的映射 双向一对多的映射 级联映射 一、组合主键的映射操作 ...看似毫无关联的两张表却可以通过配置文件完成外键关联操作。...六、级联映射 我们首先看级联操作,级联就是在两张具有关联关系的表操作的时候,通过操作其中一张表级联的更新了另一张表。...至此,有关关联映射的第一部分介绍完了,下篇将继续介绍未完的其他关联映射的操作。总结不到之处,望指出!
本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于外键的单向一对一关联映射 基于主键的单向一对一关联映射 单向多对多关联映射 一、基于外键的单向一对一关联映射 具有一对一关联的表结构也是很常见的...one-to-one标签则配置了person类中的IdCard属性,便于我们在取数据的时候Hibernate填充数据到该属性中。...下面我们添加数据到数据库中,通过查看输出的Sql语句了解Hibernate是如何为我们创建关联的。...Hibernate中处理这种多对多的关联关系是通过引入另一张表来实现对两个表主键的关联进而关联了两张表。 ?...至此,有关Hibernate中关联映射的内容已经简单介绍完毕,虽然以后会更多的使用注解来配置这些映射关联,但是都是基于XML的,对于新手来说,学习XML配置关联映射是有助于理解注解配置。
在Hibernate中,多对多关联关系(Many-to-Many relationships)是指两个实体类之间的一种关系,其中一个实体类可以与多个另一个实体类相关联,而同样一个实体类也可以与多个另一个实体类相关联...在ORM框架中,多对多关系的映射可以使用中间表、双向一对多关系和关联实体类等多种方式实现。一、什么是多对多关联关系?...多对多关系是指两个实体类之间的关系,其中一个实体类可以与多个另一个实体类相关联,而同样一个实体类也可以与多个另一个实体类相关联。...在ORM框架中,多对多关系的映射可以使用多种方式实现,比如中间表、双向一对多关系和关联实体类等。二、使用中间表映射多对多关系在本文中,我们将使用中间表的方式来实现多对多关联关系。...可以避免双向关联带来的复杂性问题。在本文中,我们将使用一个示例来演示如何使用中间表来映射多对多关联关系。
我们在设计表的时候往往一个表的外键作为另一张表的主键,那么我们在查询的时候就要查询两个表的数据。
--在执行操作之前验证表结构和类结构是否一致--> validate...DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"..."http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!...特点:有oid,不在session当中 删除状态(removed):对象有关联的ID,并且在Session管理下,但是已经计划被删除。
1.在之前学习了单表的crud操作。在实际应用中,大都是多表关联操作,这篇会学习如何处理多表之间的关系。 2.考察书籍表和书籍分类表的关系。书籍表和书籍分类表之间是多对一的关系。...} public void setName(String name) { this.name = name; } } 4.映射文件关系 Book.hbm.xml Category.hbm.xml </hibernate-mapping
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PK_ID") private SysResource parentResource; hibernate...中进行外键关联时,如果joinColumn没有指定关联外键,默认情况下是主键,如果要设定别的字段来进行关联,可以通过设定referencedColumnName来实现
一、双向一对多的关联映射 1、Student类 2、Grade类 3、Student.hbm.xml 4、Grade.hbm.xml 5、HibernateTest
我们在使用ISE时,有部分同学可能还是习惯使用Modelsim,在此,我们就ISE和Modelsim的关联做一下介绍。首先要说明的是,我的ISE的版本为14.7。
image.png 由图中可以看出实体间关系:一对多(@OneToMany) 在实际开发场景中,删除员工老板不会被删除,老板被删除了员工肯定要删除 由此,就会使用级联操作,在一对多关系中,@Cascade...cascade属性:指定级联操作的行为(可多选) CascadeType.PERSIST:级联新增(又称级联保存):对A对象保存时也会对B对象进行保存。并且,只有A类新增时,会级联B对象新增。...CascadeType.ALL:级联所有操作。...OneToMany(mappedBy = "boss", cascade = CascadeType.PERSIST) private List staffList; 执行save保存操作...OneToMany(mappedBy = "boss", cascade = CascadeType.REMOVE) private List staffList; 执行delete保存操作
这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据。比如:查看某个分类下的所有书籍信息;查看某个订单下的所有商品等。...2.在一对多的关联关系中,表的设计为: ?...> Category.hbm.xml </hibernate-mapping
cascade: 表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新或删除时 , 其关联的实体也应当被更新或删除 例如 : 实体 User 和 Order 是 OneToMany...cascade: 表示级联操作策略。 2.3.5 @ ManyToMany(可选) @ManyToMany 描述一个多对多的关联 ....4.2.1 保存操作 /** * 保存操作 * 创建一个客户和一个联系人 * 建立客户和联系人的双向关联关系 *...、更新或者删除操作时,其关联对象(被控方)也执行相同的操作。...在映射文件中通过对 cascade属性的设置来控制是否对关联对象采用级联操作,级联操作对各种关联关系都是有效的。
这篇讲解 双向的多对一关联映射 1.表结构和多对一时,一致 2.类结构 Book.java public class Book implements Serializable{ private...public void setBooks(Set books) { this.books = books; } } 3.映射文件 Book.hbm.xml Category.hbm.xml </hibernate-mapping
领取专属 10元无门槛券
手把手带您无忧上云