Set、Bag、List、Map的映射方式
1.在映射文件中选择映射方式是根据定义的集合来选择的:
2、Set:
Set集合属性映射与List非常相似,但因为Set是无序的,不可重复的集合。因此set元素无须使用index元素来指定集合元素次序。映射文件与List相似,区别在于使用set元素时,无须增加index列来保存集合的次序。映射 Set 集合属性时,如果 element 元素包括 not-null = “true” 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键。但 List 集合属性不会,List 集合属性总是以外键列和元素此序列作为联合主键。
<set name="定义的集合名 " table=" 列名">
<key column="外键列名"/>
<element type="集合值的类型" column="键名"/>
</set>
3、(1)List:
• List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序在作相应映射时,list元素要求用list-index的子元素来映射有序集合的次序列。集合的属性的值会存放有另外的表中,不可能与持久化类存储在同一个表内。因此须以外键关联,用Key元素来映射该外键列。如果要设置列的添加顺序在映射文件中使用<list>.如果由于习惯不在映射文件中设置列的添加顺序则在映射文件中使用<bag>
<list name="" table=”">
<key column=" "/>
<list-index column=" "/><!--指定某一列添加顺序-->
<element type=" " column=" "/>
</list>
(2)bag: 使用bag元素都将被映射成无序集合,而集合属性对应的表没有主键。Bag 元素只需要 key 元素来映射外键列,使用 element 元素来映射集合属性的每个元素
<bag name=" " table=" ">
<key column=" "/>
<element type=" " column=" "/>
</bag>
4、map:map集合设置的是键值对。不仅需要映射属性值,还需要映射属性Key。映射Map集合属性时,同样需要指定外键列,同时还必须指定Map的Key列。系统将以外键列和Key列作为联合主键。 Map集合属性使用map元素映射时,该map元素需要key和map-key两个子元素。其中key子元素用于映射外键列,而map-key子元素则用于映射Map集合的Key。而map-key和element元素都必须确定type属性
其映射文件为:
<map name=" " table=" ">
<key column=" "/>外键列
<map-key type="键的类型" column="键名 "/> map中的键
<element type=" " column=" "/>map中的值
</map>