Vir*_*tel 24
A <bag>是无序集合,可以包含重复元素.这意味着如果你持有一个包含一些元素顺序的包,你就不能指望在检索它时保留相同的订单.Java集合框架中没有"包"概念,所以我们只使用一个java.util.List对应的a <bag>.
A <set>类似于<bag>它只能存储唯一对象.这意味着集合中不能包含重复元素.当您第二次将相同的元素添加到集合时,它将替换旧的元素.默认情况下,集合是无序的,但我们可以要求它进行排序.Java中相应的a类型是java.util.Set.
例子
制图 <set>
<set name="employees" table="employee"
inverse="true" lazy="true" fetch="select">
<key>
<column name="department_id" not-null="true" />
</key>
<one-to-many class="net.viralpatel.hibernate.Employee" />
</set>
Run Code Online (Sandbox Code Playgroud)
制图 <bag>
<bag name="employees" table="employee"
inverse="true" lazy="true" fetch="select">
<key>
<column name="employee_id" not-null="true" />
</key>
<one-to-many class="net.viralpatel.hibernate.Employee" />
</bag>
Run Code Online (Sandbox Code Playgroud)
因此,两者在hbm文件中的映射方式完全相同.但只是它处理重复记录的方式不同.
来源:Hibernate One to Many XML教程
各种集合之间的快速总结差异如下
Bag - 可以包含重复项和无序(也称为无序列表或带有重复项的集合)
列表- 可以包含重复项但保留顺序
从Hibernate参考:
包是最坏的情况,因为它们允许重复的元素值,并且由于它们没有索引列,因此不能定义主键.Hibernate无法区分重复的行.
并且:
然而,有一种特殊情况,其中包和列表比包更具性能.例如,对于具有
inverse="true"标准双向一对多关系惯用语的集合,我们可以将元素添加到包或列表中,而无需初始化(获取)包元素.
| 归档时间: |
|
| 查看次数: |
39712 次 |
| 最近记录: |