1、set
前面已经介绍了set的使用,这里只是介绍一下其中的element元素:
如果一对多中多方的表字段很少,可以不必单独建立映射文件,使用element更加方便
如:Company--Dept
dept表只有公司id:compid,部门名称:name
那么使用上述方法更简洁:
<set name="depts" table="dept">
<key column="compid"/>
<element column="name" type="string"/>
</set>
在Company.java中设置一个Set<Dept> depts属性就可以了,element中的column="name"即表示关联表dept的name字段。
2、list
list可以设置index元素实现排序,允许集合中出现重复元素。
假设可以有部门具有相同的名称,在dept表中增加一个员工人数字段empno:
<list name="depts" table="dept">
<key column="compid"/>
<index column="empno"/>
<element column="name" type="string"/>
</list>
其余与set一样配置,这样可以实现按照员工人数empno排序。
3、map
map可以在语义上更清晰的指出集合中有哪些内容:
<map name="depts" table="dept">
<key column="compid"/>
<index column="empno"/>
<element column="name" type="string"/>
</map>
这样,我们可以用下列代码更清楚地描述我们在存取什么,而不是简单地遍历Set:
company.getDepts.put("销售部",dept1);
company.getDepts.put("市场部",dept2);
查询的时候也一样。
map也可以实现排序,默认升序,如果要降序,需要用TreeMap,并在其构造函数中传入实现了Comparator接口的实例[要自己写一个实现类]:Map m=new TreeMap(new MyComparator())
4、bag
bag并非java api的一个接口,只是hibernate提供的一个模拟行为,bag可以存放重复对象,并且不排序(结合了set与list的特点)。
另外,idbag、list没有inverse="true"的属性,而bag与set可以设置inverse="true"