集合映射(set, list, array,bag, map)
一.在持久化类中,有时会使用到值类型的对象属性,如果持久化类中有一个值类型的集合,那么就需要一张额外的数据库表来保存这个值得类型集合数据,这张表被称为集合表。
1. 选择集合接口
Hibernate支持大部分重要的 JDK集合接口映射,主要有以下几种
1,<set>元素:它的元素存放没有顺序且不重复;
2,<list>元素:它需要在集合属性对应的数据库表中用一个额外的索引列保存每个元素的位置。
3,<bag>或者<idbag>元素:它的元素可能重复,但不保存顺序
4,<map>元素:它的元素以键值对的形式保存,也是无序的,它的元素可以按自然顺序排序
二.映射set,list,bag,map
1,持久化学生类;
public class Student {
private int id;
private String name;
//private Set<String> hobbies;//爱好集合
//private List<String> hobbies;
private Map<Long,String> hobbies;
。。。。。。。。。。。。。。
}
2. 它对应的对象关系映射文件Student.hbm.xml
<hibernate-mapping
package="com.hbsi.domain">
<class name="Student" table="student">
<id name="id"column="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- <setname="hobbies" table="student_hobby">
//key子元素:指定集合属性对应的表的外键列
<keycolumn="student_id"></key>
//element子元素:映射集合内部的元素
<element type="string"column="hobbies_name"></element>
</set> -->
<!-- <list name="hobbies" table="student_hobby">
<key column="student_id"/>
<list-index column="order_index"/>
<element type="string"column="hobbies_name"> </element>
</list>
-->
<!-- <bagname="hobbies" table="student_hobby">
<key column="student_id"/>
<element type="string"column="hobbies_name"> </element>
</bag>
-->
<map name="hobbies" table="student_hobbies">
<key column="student_id"/><!-- 外键 -->
<map-key type="long" column="hobby_id"></map-key><!-- 建 -->
<element type="string" column="hobbies_name"></element><!-- 值 -->
</map>
</class>
</hibernate-mapping>
三,排序集合和有序集合
在实际开发中,经常要在集合中的元素是按一定要求排列好顺序后在返回给使用者的。
Student类;
public class Student {
private int id;
private String name;
//private Set<String> hobbies;//爱好集合
//private List<String> hobbies;
private SortedSet<String> hobbies;
。。。。。。。。。。。。。。
}
映射文件:
Sort属性:指定排序的规则。可选的值:unsorted(不排序),natural(按comparteTo()方法进行比较排序后排序),自定义的排序容器
<setname="hobbies" table="student_hobby" sort=”natural”>
//key子元素:指定集合属性对应的表的外键列
<key column="student_id"></key>
//element子元素:映射集合内部的元素
<element type="string"column="hobbies_name"></element>
</set>