您的位置:首页 > 数据库

hibernate 集合(set, list, array,bag, map)

2012-05-03 09:29 423 查看
Hibernate中将集合分为四类:

(1)<set>元素:可以映射类型为java.util.Set接口的属性,它的元素存放没有顺序且不允许重复,也可以映射类型为java.util.SortSet接口的属性,它的元素可以按自然属性排序

(2)<list>元素:可以映射类型为java.util.List接口的属性,它需要在结合属性对象的数据库表中用一个额外的索引列保存每一个元素的位置,即是有属性可重复的。

(3)<bag>元素:可以映射java.util.Collection接口的属性,它的元素可能重复,但不保存属性,和set差不多,正因为有它,是因为如果通常使用list比较多,并且不想让添加一列的话,就用它。

(4)<map>元素:可以映射为java.util.Map接口的属性,它的元素以键值对的形式保存,也是无序的,也可以映射类型为java.util.SortMap接口的属性,它的元素可以按自然顺序排序。

(5)<array>元素:可以映射类型为数组的属性,但在实际运用中用的极少

Bag
是最差的。因为 bag 允许重复的元素值,也没有索引字段,因此不可能定义主键。 Hibernate 无法判断出重复的行。当这种集合被更改时,Hibernate 将会先完整地移除 (通过一个(in a single 
DELETE
))整个集合,然后再重新创建整个集合。因此 Bag 是非常低效的。

Lists,maps 和 sets 用于更新效率最高(索引key),查询的时候效率都是一样的.

list,map 和
idbags 是最高效的(非反向)集合类型,set 则紧随其后。 在 Hibernate 中,set 应该时最通用的集合类型。

Set:

<set name="emps" table="emp" cascade="all">
<key>
<column name="deptno"></column>
</key>
<one-to-many class="org.hzy.dao.Emp"/>
</set>
Bag:

<bag name="emps" table="emp" order by="empno desc">
<key><column name="deptno"></column></key>
<one-to-many class="org.hzy.dao.Emp"/>
</bag>
List:
<list name="emps" table="emp">
<key><column name="deptno"></column></key>
<list-index column="empno" base="100"></list-index>
<one-to-many class="org.hzy.dao.Emp"/>
</list>

Map:

<map name="emps" table="emp" order-by="empno desc">
<key><column name="deptno"></column></key>
<map-key type="java.lang.Integer" column="empno"></map-key>
<one-to-many class="org.hzy.dao.Emp"/>
</map>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息