1012--映射一对多关联关系(.双向 1-n)
2015-06-29 00:20
211 查看
•双向 1-n 与 双向n-1是完全相同的两种情形
•双向 1-n 需要在1的一端可以访问n的一端,反之依然.
•域模型:从Order到Customer的多对一双向关联需要在Order类中定义一个Customer属性,而在Customer类中需定义存放Order对象的集合属性
•
•
•关系数据模型:ORDERS
表中的 CUSTOMER_ID参照CUSTOMER表的主键
•
•当 Session
从数据库中加载 Java 集合时,创建的是Hibernate内置集合类的实例,
因此在持久化类中定义集合属性时必须把属性声明为Java接口类型
–Hibernate 的内置集合类具有集合代理功能,支持延迟检索策略
–事实上,Hibernate
的内置集合类封装了 JDK 中的集合类,
这使得 Hibernate
能够对缓存中的集合对象进行脏检查,
按照集合对象的状态来同步更新数据库。
•在定义集合属性时,
通常把它初始化为集合实现类的一个实例.
这样可以提高程序的健壮性,
避免应用程序访问取值为 null
的集合的方法抛出 NullPointerException
•Hibernate 使用
<set> 元素来映射 set类型的属性
•
.set
•<set>元素来映射持久化类的set类型的属性
–name: 设定待映射的持久化类的属性的
•<key>元素设定与所关联的持久化类对应的表的外键
–column: 指定关联表的外键名
•<one-to-many>元素设定集合属性中所关联的持久化类
–class: 指定关联的持久化类的类名
<set> 元素的 inverse 属性
•在hibernate中通过对inverse属性的来决定是由双向关联的哪一方来维护表和表之间的关系. inverse =
false的为主动方,
inverse = true的为被动方,由主动方负责维护关联关系
•在没有设置 inverse=true的情况下,父子两边都维护父子
关系
•在 1-n 关系中,将n方设为主控方将有助于性能改善(如果要国家元首记住全国人民的名字,
不是太可能,但要让全国人民知道国家元首,就容易的多)
•在 1-N 关系中,若将1方设为主控方
–会额外多出 update
语句。
–插入数据时无法同时插入外键列,因而无法为外键列添加非空约束
[b]<set> 元素的cascade 属性[/b]
•在对象 – 关系映射文件中,用于映射持久化类之间关联关系的元素,
<set>, <many-to-one> 和<one-to-one>都有一个cascade
属性,它用于指定如何操纵与当前对象关联的其他对象.
在数据库中对集合排序
•<set> 元素有一个
order-by 属性,如果设置了该属性,
当 Hibernate
通过 select 语句到数据库中检索集合对象时,利用
order by 子句进行排序
•order-by 属性中还可以加入SQL
函数
•双向 1-n 需要在1的一端可以访问n的一端,反之依然.
•域模型:从Order到Customer的多对一双向关联需要在Order类中定义一个Customer属性,而在Customer类中需定义存放Order对象的集合属性
•
•
•关系数据模型:ORDERS
表中的 CUSTOMER_ID参照CUSTOMER表的主键
•
•当 Session
从数据库中加载 Java 集合时,创建的是Hibernate内置集合类的实例,
因此在持久化类中定义集合属性时必须把属性声明为Java接口类型
–Hibernate 的内置集合类具有集合代理功能,支持延迟检索策略
–事实上,Hibernate
的内置集合类封装了 JDK 中的集合类,
这使得 Hibernate
能够对缓存中的集合对象进行脏检查,
按照集合对象的状态来同步更新数据库。
•在定义集合属性时,
通常把它初始化为集合实现类的一个实例.
这样可以提高程序的健壮性,
避免应用程序访问取值为 null
的集合的方法抛出 NullPointerException
•Hibernate 使用
<set> 元素来映射 set类型的属性
•
.set
•<set>元素来映射持久化类的set类型的属性
–name: 设定待映射的持久化类的属性的
•<key>元素设定与所关联的持久化类对应的表的外键
–column: 指定关联表的外键名
•<one-to-many>元素设定集合属性中所关联的持久化类
–class: 指定关联的持久化类的类名
<set> 元素的 inverse 属性
•在hibernate中通过对inverse属性的来决定是由双向关联的哪一方来维护表和表之间的关系. inverse =
false的为主动方,
inverse = true的为被动方,由主动方负责维护关联关系
•在没有设置 inverse=true的情况下,父子两边都维护父子
关系
•在 1-n 关系中,将n方设为主控方将有助于性能改善(如果要国家元首记住全国人民的名字,
不是太可能,但要让全国人民知道国家元首,就容易的多)
•在 1-N 关系中,若将1方设为主控方
–会额外多出 update
语句。
–插入数据时无法同时插入外键列,因而无法为外键列添加非空约束
[b]<set> 元素的cascade 属性[/b]
•在对象 – 关系映射文件中,用于映射持久化类之间关联关系的元素,
<set>, <many-to-one> 和<one-to-one>都有一个cascade
属性,它用于指定如何操纵与当前对象关联的其他对象.
在数据库中对集合排序
•<set> 元素有一个
order-by 属性,如果设置了该属性,
当 Hibernate
通过 select 语句到数据库中检索集合对象时,利用
order by 子句进行排序
•order-by 属性中还可以加入SQL
函数
相关文章推荐
- nyoj216
- 数据类型及数据表的操作
- android 中 图形缩放
- 存储过程与事务
- vim g s 对比
- 初涉MySQL
- 手机APP UI设计尺寸基础知识
- STM32 CRC-32 Calculator Unit
- 黑马程序员——Java中类的加载与反射笔记
- 作业——tab切换简易版
- 2015个人书单
- 查找二叉树的操作
- LeetCode——Sqrt(x)
- 【Leetcode】Reversed Linked List
- UVA 550 Multiplying by Rotation (简单递推)
- Java基础:泛型及其擦除性、不可协变性
- hdu2005 关于输入的技巧及初始化问题
- 内存和FLASH的区别
- JavaScript写一个小乌龟推箱子游戏
- hadoop 流streaming跑python程序