Hibernate中的Set和Bag集合的主要区别是什么?我们应该在什么情况下使用Set和Bag
发布于 2012-12-13 00:06:18
<bag>是一个无序集合,它可以包含重复的元素。这意味着,如果您持久化一个包含某些元素顺序的包,则不能期望在检索集合时保持相同的顺序。在Java集合框架中没有“包”的概念,所以我们只使用与<bag>相对应的java.util.List。
<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>映射<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>因此,两者在hbm文件中的映射方式完全相同。但不同之处只在于它处理重复记录的方式。
来源:Hibernate One to Many XML Tutorial
发布于 2012-12-11 16:53:09
来自Hibernate参考:
包是最糟糕的情况,因为它们允许重复的元素值,并且因为它们没有索引列,所以不能定义主键。Hibernate无法区分重复行。
还有:
有一种特殊的情况,在这种情况下,袋子和清单比套装要好得多。例如,对于具有
inverse="true"的集合,即标准的双向一对多关系习惯用法,我们可以向包或列表添加元素,而无需初始化(获取)包元素。
发布于 2018-01-17 13:28:38
不同集合之间的快速总结差异如下
- Can be created using @OrderBy to preserve order
https://stackoverflow.com/questions/13812283
复制相似问题