首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><bag>与<list>的基本区别

<bag>与<list>的基本区别
EN

Stack Overflow用户
提问于 2014-04-02 10:28:23
回答 3查看 14K关注 0票数 3

我正在学习Hibernate,在hibernate中使用集合。我知道集合中的袋子用于映射集合或列表类型的属性。此外,还区别于袋子和列表是袋子无序的重复允许的集合类型,在列表中我们保持插入顺序在集合。

1>,除了这个,这两者还有什么区别吗?

2>,我在一本书里读到,

bag是指缺少对象作为包中元素的键,这降低了更新或删除元素的性能。当包中的元素发生变化时,Hibernate必须更新所有元素,因为Hibernate无法确定哪些元素已更改。

有人知道这件事吗?

EN

回答 3

Stack Overflow用户

发布于 2014-04-02 11:27:43

你的定义是正确的。包就像没有索引的列表(您不知道元素的顺序),所以它类似于使用重复设置。

最重要的是要知道,如果在一对多的关系中不使用索引列,Hibernate可以隐式地将您的集合映射为一个包。这可能会降低delete/update语句的性能,了解这一点是很好的。

在这里您可以发现它是如何内部工作的:http://assarconsulting.blogspot.co.uk/2009/08/why-hibernate-does-delete-all-then-re.html

票数 2
EN

Stack Overflow用户

发布于 2016-05-17 11:42:05

当您不希望列表的插入顺序功能,但希望允许重复的值,那么您可以选择袋子。在这里,您不能使用set,因为它不允许重复值。

票数 0
EN

Stack Overflow用户

发布于 2017-12-24 20:54:25

a)袋

只想再加一点。有两种类型的袋子:1)没有身份证的袋子和2)带身份证的袋子。

在没有Id的袋子中,当你移除任何元素时,整个袋子被清除,元素再次插入。

但是在带Id的袋子中,已经删除的元素只会被移除,其余的元素不会受到影响。

代码语言:javascript
复制
@ElementCollection
    @CollectionTable(name = "account_user",joinColumns=@JoinColumn(name="user_id"))
    @CollectionId(columns = { @Column(name = "account_user_id") }, generator = "sequence", type = @Type(type = "long"))
    @Column(name = "account_provider")
    private Collection<String> accountSet = new ArrayList<String>();

因此,如果你正在使用袋,总是尝试使用身份证袋,除非你有充分的理由使用另一个。

b)列表列表也有两种类型,有顺序的列表和没有顺序的列表。

没有订单的列表类似于没有ids的袋子。

代码语言:javascript
复制
@ElementCollection
        @CollectionTable(name = "account_user",joinColumns=@JoinColumn(name="user_id"))
        @Column(name = "account_provider")
        private List<String> accountSet = new ArrayList<String>();

在有顺序的列表中,数据结构维护索引顺序。所以,如果你删除其中一个元素。其余的元素被自动移动。

因此,这种类型的列表用于维护将元素插入到列表中的顺序。

代码语言:javascript
复制
@ElementCollection
    @OrderColumn(name="account_provider_order")
    @CollectionTable(name = "account_user",joinColumns=@JoinColumn(name="user_id"))
    @Column(name = "account_provider")
    private List<String> accountSet = new ArrayList<String>();

另外,请注意,尽管排序在表的单独列中持久化。当您获取时,它不会出现在对象状态上。因此,它只是用于内部操作。

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

https://stackoverflow.com/questions/22808566

复制
相关文章

相似问题

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