Hibernate读书笔记-----Hibernate知识总结(二)

2014-11-24 08:46:57 · 作者: · 浏览: 1












五、Hibernate映射集合属性
集合属性是很常见的。集合属性一般分为两种,一种是单纯的集合属性,如List、Set或者数组等集合属性,另一种是map结构的集合属性,每个属性值都有对应的key映射。

集合映射的元素大致有如下这些:
1、list:用于映射List集合属性
2、set:用于映射Set集合属性
3、map:用于映射Map集合属性
4、array:用于影视数组集合属性
5、primitive-array:用于映射基本数据类型的数组
6、bag:用于应射无序集合
7、idbag:用于映射无序集合,但是为集合增加了逻辑次序

注意:
1、两个持久化对象不能共享同一个集合元素的引用
2、因为集合属性都需要保存在另一个数据表中个,所以需要指定一个外键列,用于参照到主键列
3、在所有的结合映射中,除了元素外,都需要为集合元素的数据表指定一个索引列。

下面是集合属性的基本配置:
1、List集合属性
List集合属性采用元素进行映射,同时还需要使用子元素来映射list属性的索引列,同时还需要增加元素来映射外键列。
[html]









2、数组属性
数组属性采用元素进行映射。
[html]









3、Set集合属性
Set集合属性采用元素进行映射。因为Set是无序,不可重复的,所以它不需要使用元素来映射索引列。Set也需要使用元素来映射外键列。
[java]







4、bag元素映射
元素只需要元素来映射关联的外键列,元素来映射集合属性的元素列。
使用元素可以映射List集合属性、Set集合属性、Collection集合属性。但是使用元素都将会被映射成无序集合,而且集合对应的表没有主键。
[html]






5、Map集合属性
Map集合属性需要使用元素进行映射。它除了需要使用元素映射外键列,元素来映射集合属性的元素列。还需要使用元素映射map key.
Map集合属性是以外键列和key列作为联合主键。
[html]









六、Hibernate映射组件属性
组件属性标志着该属性并不是一个简单的基本数据类型、字符串、日期的变量,而是一个符合类型的对象。
在映射组件属性中,Hibernate提供了元素进行映射,每一个元素映射一个组件属性。使用元素时需要指定一个name属性,该属性用于指定该组件属性的名称。
[html]





当集合属性的元素作为组件时,我们需要使用来映射了。使用元素时需要指定一个class属性,该属性值指定了集合里组件对象的类型。
[html]










七、Hibernate的关联映射
Hibernate的关联关系有两种:单向、双向。
其中单向关联分为:1-1、1-N、N-1、N-N。
双向关联分为:1-1、1-N、N-N。

7.1、单向N-1关联
对于单向N-1关联,只需要在在N的一端的持久化类增加一个属性,该属性引用1的一端的关联实体。
1、无连接表的N-1关联(基于外键)
Hibernate使用元素映射N-1的关联实体。N的一端采用元素来映射关联关系,同时需要增加一个外键列,用来参照主表记录。1的一端保存不变。
[html]


注意:对于所有的基于外键约束关联关系中,都必须这样:要么总是持久化主表对应的实体,要么设置级联操作(cascade="all")。

2、基于连接表的N-1关联
对于基于有连接表的关联关系,需要使用元素来映射。元素用于强制将一个类的属性映射到多张表中。
在这里映射文件中这样:N的一端使用元素来映射关联关系,同时还需要增加子元素来映射外键,并且为元素增加子元素,用来映射N-1的关联实体。同样1的一端不变。
[html]







7.2、单向1-1关联
对于1-1关联而言,它有三种关联映射策略:基于外键、基于连接表、基于主键。
1、基于外键的单向1-1关联
基于外键的1-1关联映射与基于外键的N-1的映射文件几乎没有什么区别,只需要在元素中指定unique="true"即可实现。
[html]

2、基于连接表的单向1-1关联
基于连接表的1-1关联映射与基于连接表的N-1的映射也没有什么区别,同样只需要在元素中指定unique="true"即可实现。
[html]





3、基于主键的单向1-1关联
对于基于主键的1-1关联映射,它的持久化类不能有自己的主键生成器策略,它的主键应该有关联实体来负责生成。
采用元素来映射基于主键的1-1关联。同时应该给该元素指定一个name属性,该属性的值指定关联实体属性的属性名。
[html]



address




7.3、单向1-N关联
对于单向1-N关联关系的持久化类,1的一端需要访问N的一端,而N的一端应该以集合的形式表现。
1、基于无连接表的单向1-N
在N的一端需要映射集合属性,还要使用来映射关联实体。
[html]





2、基于有连接表的单向1-N
对于有连接表的1-N关联映射,映射文件使用元素来映射关联实体,但为了保证当前实体是1的一端,需要增加unique="true"属性来指定。
[html]






7.4、单向N-N关联
单向的N-N关联与1-N关联的持久化类完全相同,控制关系的一端需要增加一个Set类型的属性,被关联的持久化类实体以