1. 一个集合对应一个集合表。
2. 使用集合属性时,一定要使用接口,而不能声明为具体的实现类。因为经过Session操作后,集合就变成了Hibernate自己的集合实现类。
一、Set集合
1. Set集合:addressSet属性 在映射表中的配置,set集合中存储的对象应对应一张表,需要在映射表中完成,存储对象对应表的内容:主键、信息。
1) table属性:集合表的名称
2) key子元素:集合外键的列名,即外表的外键。这个外键与本表的主键相关联。
3) element子元素:存放集合元素的列的信息
4) sort属性:"unsorted| natural | comparatorClass" 默认为:unsorted,这个属性可为TreeSet和TreeMap排序。
如果使用了sort的属性,则定义容器时使用sortSet
5) order-by属性:写的是orderby 子句,是SQL语句,是操作的集合表。这是在查询数据时指定orderby子句。
二、list集合
1. 由于list集合时有序的,所以在集合表中需添加一列,用来作为联合主键,使查询结果有序。
2. llst-index:用来存放索引的列
三、Map集合
1. 与list集合相似,较Set集合表多出一列,用来表示key。
四、其他集合
1. 数组:
2. Bag:无序、可重复。Java中使用list装数据
1. 1的一方
1) Demain中:
使用一个set集合,存储类型是“多”一方数据的实体。
2) 在映射配置文件中
a) name:set集合的属性名
b) key:映射“多”方表中的外键类名
c) one-to-many:中class指明“多方”的实体类。即关联的实体类。
3) 其他属性:
a) inverse属性:
默认为false,表示本方维护关联关系。
如果为true,表示本方不维护关联关系。
只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响。
b) cascade属性:
默认为none,代表不级联。
级联是指操作主对象时,对关联的对象也做相同的操作。
可设为:delete, save-update, all, none ...
2. 多的一方
1) Demain中:
设置一个“1”方的类对象,用来指定属于哪一个类别。
2) 在映射配置文件中
a) name:指明属性名称。
b) class:关联的实体类
c) column:外加列名称
1. 在Demain中:
每一“多”方的Demain中都有一个set集合。这个集合用来保存关联对象的集合。
2. 在映射配置文件中
如图需要说明以上4个消息。以其中一个为例:
1) Name:指明类中集合属性名称
2) Table:中间表名称
3) Key:关联集合的外键,列名称。
4) Class:关联对象
5) Column:关联对象在关联集表(中间表)中的外键名称,列名称。
1. 基于外键形式(最常用)
1) 无外键方:
Name:属性名称。
Class:关联对象的类型。(这两项在关联实体中必有)
Property-ref:有外键方,外键列的名称。
2) 有外键方:
Name:属性名称。
Class:关联对象类型。
Unique:唯一性约束。在有外键方,外键需要加上唯一性约束。这样才能保证一对一的映射。
2. 基于主键的(几乎不用)
1. 整个继承结构使用一张表
1) 子类使用
2) 子类中不用指定表的名称,因为子类不创建表。
3) 使用一张表表示整个继承关系时,需要添加一个鉴别列。即
4) 并且在每个子类中需指定鉴别类的值。
2. 每个类创建一张表
1) 子类使用
2) 子类中需要指定表名称。
3) 子类中需要定义指向父类Id的外键
3. 每个具体的类对应一张表,即父类不对应表
1) 父类中需指定 abstract=”fale”,即不会为它创建表
2) 父类中主键生成策略不能使用identity,因为整个集成结构中,主键值是不能重复的。