首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate中Set和Bag的区别

Hibernate中Set和Bag的区别
EN

Stack Overflow用户
提问于 2012-12-11 09:35:06
回答 4查看 44.7K关注 0票数 24

Hibernate中的SetBag集合的主要区别是什么?我们应该在什么情况下使用SetBag

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-13 00:06:18

<bag>是一个无序集合,它可以包含重复的元素。这意味着,如果您持久化一个包含某些元素顺序的包,则不能期望在检索集合时保持相同的顺序。在Java集合框架中没有“包”的概念,所以我们只使用与<bag>相对应的java.util.List

<set>类似于<bag>,不同之处在于它只能存储唯一对象。这意味着一个集合中不能包含重复的元素。当您第二次将相同的元素添加到集合中时,它将替换旧的元素。默认情况下,集合是无序的,但我们可以要求对其进行排序。在Java中对应的a类型是java.util.Set

示例

映射<set>

代码语言:javascript
复制
 <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>

代码语言:javascript
复制
  <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

票数 25
EN

Stack Overflow用户

发布于 2012-12-11 16:53:09

来自Hibernate参考:

包是最糟糕的情况,因为它们允许重复的元素值,并且因为它们没有索引列,所以不能定义主键。Hibernate无法区分重复行。

还有:

有一种特殊的情况,在这种情况下,袋子和清单比套装要好得多。例如,对于具有inverse="true"的集合,即标准的双向一对多关系习惯用法,我们可以向包或列表添加元素,而无需初始化(获取)包元素。

票数 7
EN

Stack Overflow用户

发布于 2018-01-17 13:28:38

不同集合之间的快速总结差异如下

  • Set -无重复和无顺序-可以包含重复项和无顺序(也称为无序列表或Set with duplicates)
  • List -可以包含重复项,但保留顺序

代码语言:javascript
复制
- Can be created using @OrderBy to preserve order

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13812283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档