Hibernate关联映射
单向一对多(1-N)关联
适用场合:只从一的一方访问多的一方,不从多的一方访问一的一方。在设计对象模型时,多的一方中有一个多的一方的集合类型的属性;在映射文件中,一的一方要使用集合来映射这个属性。
映射集合属性
集合属性有两种:单纯的集合属性;Map结构的集合属性。Hibernate要求持久化集合值字段必须声明为接口类型,包括java.util.Set、java.util.Collection、java.util.List、java.util.Map、java.util.SortedSet、java.util.SortedMap等。用于映射集合属性的元素大致有list——映射List集合属性、set——映射Set集合属性、map——映射Map集合属性、array——映射数组集合属性、primitive-array——映射基本数据类型的数组、bag——映射无序集合、idbag——映射无序集合,但为集合增加逻辑次序几种。
这些元素的属性如下:
name:必选,映射的属性名称。
table:指定保存集合属性的表名,默认与属性名相同。
schema:指定保存集合属性数据表的Schema名,覆盖根元素的值。
lazy:是否启动延时加载,默认为true。
inverse:指定该集合属性作为双向关联关系中的另一端。
casecade:指定当操作持久化对象时是否让操作级联到子实体。
order-by:设置数据库对集合元素的排序,在内存中排序。
sort:指定集合排序的顺序。
where:指定任意的SQL语句中的where条件,在加载或删除时起作用。
batch-size:定义延时加载时每批抓取集合元素的数量,默认为1。
access:访问属性的策略,默认为property。
mutable:指定集合中的元素是否可变。
因为集合属性都需要保存到另一个数据表中,所以保存集合属性的数据表必须包含一个外键列,用于参照到主键列。在<set ... />、<list ... />等集合元素中使用<key ... />子元素来映射。
<key ... />元素可包含下列属性:
column:指定外键字段的列名。
on-delete:指定外键约束是否打开数据库级别的级联删除。
property-ref:指定外键引用的字段是否为原表的主键。
not-null:外键列是否具有非空约束。
update:外键列是否可以更新。
unique:外键是否具有唯一约束。
在在<set ... />、<list ... />等集合元素中使用<one-to-many ... />来映射一对多的关联关系。
class:必填,指定集合中实体的类型。
not-found:未找到外键引用的实体时,系统的处理方式,默认为exception。
例如:
部门和员工,一个部门中有多个员工。
对象模型:
映射文件: