转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6760895.html

一:单向一对一

常用唯一外键的方法来配置单向一对一关系。

1:实体关系

类A中有类B对象作为属性,一个A对象对应唯一一个B对象

2:表关系

表A中有外键x,其值是表B的主键,并且外键值不能重复

3:配置文件

类A的配置文件中:

<many-to-one name="类A中作为属性的类B对象名" class="类B路径"  column="表A中的外键名" unique="true"/>

4:表操作

在操作类A对象时,先操作B表中一条记录b,再操作A表中的外键值与B表记录b主键值相同的一条记录。

二:单向多对一

1:实体关系

类A中有类B对象作为属性,可以有多个类A对象对应同一个类B对象作为属性值。

2:表关系

A表中有外键x,其值是B表的主键,并且外键值可以重复

3:配置文件

类A的配置文件中:

<many-to-one name="类A中作为属性的类B对象名" class="类B路径"  column="表A中的外键名"/> 

4:表操作

在操作A对象时,先操作B表中的一条记录b,再操作A表中外键值与B表记录b主键值相同的记录。

三:单向一对多

1:实体关系

类A中有类B对象的集合,所以一个类A对象可以对应多个B对象。

2:表关系

表A的主键,作为表B的一个外键,并且可以在表B中出现多次

3:配置文件

类A的配置文件中:

<set name="B对象集合名">
<key column="A对象要映射成为的,B表中的外键名"/>
<one-to-many class="B类路径"/>
</set>

4:表操作

在操作A对象时,先操作A表中一条记录a,再操作B表中外键值与A表记录a相同的记录。

四:单向多对多

1:实体关系

类A中有类B对象的集合,所以一个A对象对应多个B对象。而多个A对象也可对应同一个B对象集合。

2:表关系

多对多关系需要借助中间表来建立关联关系。

表A、表B分别保存类A、类B的成员属性。

中间表保存两个属性:A的主键、B的主键。

中间表的记录通过A、B的主键建立关联。

3:配置文件

类A配置文件中:

<set name="集合对象名" table="中间表名">
<key column="类A映射为中间表的a_id属性列"/>
<many-to-many class="类B路径" column="类B映射为中间表的b_id属性"/>
</set>

4:表操作

操作A对象时,先操作A表,然后根据中间表,操作B表中相关记录。

五:双向一对多(常用)

1:实体关系

类A有类B对象集合,一个对象A对应多个对象B;

类B有类A的属性对象,一个B对象可以对应一个A对象,多个B对象可以对应同一个A对象。

2:表关系

表A中的主键,作为表B中的一个外键,并且该外键值可以重复。

3:配置文件

一的一端:类A配置文件中

<set name="B对象集合名" inverse="true"> //控制反转,让表B维护关联关系:即在操作表B时维护关联关系,无需再回头update表A来维护关系
<key column="当前类A映射为B表中的外键名"/>
<one-to-many class="类B路径"/>
</set>

多的一端:类B配置文件中

<many-to-one name="类B中的A对象成员名" column="由A主键映射过来的外键名"/> 

4:表操作

依次操作表A,表B。

六:双向多对多

1:实体关系

类A中有类B对象集合;

类B中也有类A对象集合。

2:表关系

借助中间表类维护多对多关系。

表A保存类A的普通成员属性数据(不包括集合属性);

表B保存类B的普通成员属性数据(不包含集合属性);

中间表自动生成,保存类A、类B的主键,其记录通过A、B的主键值维护关联关系。

3:配置文件

A端:

<set name="B对象集合名" table="中间表名" cascade="级联操作的类型">  //cascade属性:指明session对A对象的操作时,会同时把关联的B对象进行同样操作,而不需手动再操作一次
<key column="A映射为中间表的a_id属性列"/>
<many-to-many class="类B路径" column="B映射为中间表的b_id属性列"/>
/set>

B端:

<set name="A对象集合名" table="中间表名">
<key column="B映射为中间表属性列名"/>
<many-to-many class="类A路径" column="类A映射为中间表属性列名" inverse="true"/> //控制反转:由A端维护关联关系
/set>

4:表操作

依次操作表A、表B。

Hibernate学习笔记二:常用映射配置的更多相关文章

  1. Hibernate学习笔记二:Hibernate缓存策略详解

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

  2. Hibernate学习笔记二

    Hibernate持久化类的编写规则 Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中. 持久化类 一个java类与数据库表建 ...

  3. Spring4学习笔记二:Bean配置与注入相关

    一:Bean的配置形式 基于XML配置:在src目录下创建 applicationContext.xml  文件,在其中进行配置. 基于注解配置:在创建bean类时,通过注解来注入内容.(这个不好,因 ...

  4. Hibernate学习笔记之EHCache的配置

    Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1.添加相关的包: Ehcache.jar和commons-logging.jar,如果hibernate ...

  5. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  6. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  7. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  8. thinkphp学习笔记4—眼花缭乱的配置

    原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...

  9. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

随机推荐

  1. 丑闻第一季 /全集Scandal迅雷下载

    丑闻 第一季 Scandal Season 1 (2011)本季看点:“格蕾之母”珊达·瑞密斯(Shonda Rhimes)最新创作的政治公关题材剧集<丑闻>因为播出在即加大了宣传攻势,最 ...

  2. 自定义各式各样的圆形ProgressBar

         上面三个图分别是 开始时的样子,走进度时候的样子,最后完成的样子 这是我在两个大神的Demo基础上修改后的结果,我们先来看看自定义view是怎么做到的. 1.自己写一个类继承View类,然后 ...

  3. 简单实用UML关系图解

    一句话UML,再记不住就要DPP了: 关系 图解 代码 备注 1:继承关系(Generalization)     2:实现关系(Realization)     3:依赖关系(Dependency) ...

  4. Shell操作mysql数据库

    From : http://www.2cto.com/database/201306/220570.html Shell操作mysql数据库   mysql  -hhostname -Pport -u ...

  5. git如何删除远端不存在的本地分支?

    问题:远端分支删除后,如何删除之前拉取的本地分支? 答案: git fetch -p git remote show origin 可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息 ...

  6. spring boot成功启动后访问报错404的问题

    Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as ...

  7. Dapper,大规模分布式系统的跟踪系统

    概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...

  8. 奇怪吸引子---AnishchenkoAstakhov

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  9. FreePascal - Typhon在Windows10 X64下的使用问题!

    Typhon是CodeTyphon中的开发FreePascal的IDE工具. 在Windows10 X64中安装完CodeTyphon后,我们会发现有两套Typhon,分别对应32位和64位,32位可 ...

  10. window.open不被拦截的实现代码

    $("#last").click(function(){ var w=window.open(); setTimeout(function(){ w.location=" ...