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

本文详细介绍了Hibernate中五种集合映射方式:set、list、bag、map及array的特点与应用场景,对比了它们之间的性能差异,并提供了具体的XML配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 singleDELETE))整个集合,然后再重新创建整个集合。因此 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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值