Hibernate学习笔记二:常用映射配置
转载请注明原文地址: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学习笔记二:常用映射配置的更多相关文章
- Hibernate学习笔记二:Hibernate缓存策略详解
一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...
- Hibernate学习笔记二
Hibernate持久化类的编写规则 Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中. 持久化类 一个java类与数据库表建 ...
- Spring4学习笔记二:Bean配置与注入相关
一:Bean的配置形式 基于XML配置:在src目录下创建 applicationContext.xml 文件,在其中进行配置. 基于注解配置:在创建bean类时,通过注解来注入内容.(这个不好,因 ...
- Hibernate学习笔记之EHCache的配置
Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1.添加相关的包: Ehcache.jar和commons-logging.jar,如果hibernate ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- docker学习笔记二:常用命令
docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- thinkphp学习笔记4—眼花缭乱的配置
原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
随机推荐
- docker查看容器的网络ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id 可直 ...
- algid parse error, not a sequence错误
主要使用由于没有对使用openssl生成的公私密钥对进行pkcs8编码,导致程序无法识别参考支付宝.项目用用到RSA加密用openssl生成了一个公私密钥对,在对加密字符串进行数字签名的时候,程序一直 ...
- 超人前传第一至十季/全集Smallville迅雷下载
超人前传 第一至十季 Smallville Season 1-10 (2001-2010)本季看点:CW台的长寿剧<超人前传>在以帅哥靓女征服观众了这么多年后,也终于进入尾声,该剧将于今年 ...
- 通过图形化工具来画shape
前两天一个哥们分享了十分好用的图形化工具,这样我们就能实时的看到自己用代码写出来的shape是怎么样的了,更牛的是它可以让我们自己去设定值,最后生成代码,这样我们为什么要去自己写shape呢?如果一个 ...
- TextView 中文文档
属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) ...
- [Web 前端] 如何构建React+Mobx+Superagent的完整框架
ReactJS并不像angular一样是一个完整的前端框架,严格的说它只是一个UI框架,负责UI页面的展示,如果用通用的框架MVC来说,ReactJs只负责View了,而Angular则是一个完整的前 ...
- Effective Java - Item 1: Consider static factory methods instead of constructors
考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int ...
- 8Manage PMP 项目管理工具
范围与需求管理 8Manage 项目管理平台提供先进的机制集中管理项目的范围与需求: 提供需求申请功能:获取,过滤,解析和明确项目的需求 提供需求矩阵功能:整理分析需求并跟踪需求从开始到完成的整个过程 ...
- Android -- ConditionVariable
线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步.提供了三个方法block().open().close() ...
- 在Linux下锁住键盘和鼠标而不锁屏
假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...