gpt4 book ai didi

java - Hibernate bag 与 idbag

转载 作者:行者123 更新时间:2023-12-03 07:21:43 27 4
gpt4 key购买 nike

我已经研究了 bag 和 idbag 之间的区别,我理解它们之间的区别,但我想了解的是,如果使用 bag 而不是 idbag ,是否会出现问题,反之亦然。有人可以用一个例子解释一下吗?

最佳答案

Bag 是一个无序集合,并且与 idbag 不同,它不使用额外的列来存储每个元素索引。

不存在 bag 可以工作而 idbag 不行的用例。唯一的区别是它们的效率:

  1. Bags are the most efficient inverse collection但它们对于单向一对多关联表现不佳:

Bags are the worst case since they permit duplicate element values and, as they have no index column, no primary key can be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing in a single DELETE and recreating the collection whenever it changes. This can be inefficient.

  • idbag 是遗留的 hibernate 映射,它们用于提供 more efficient unidirectional associations alternative
  • 您可以使用 JPA @OrderColumn 定义 idbag 语义。注释:

    @OneToMany(mappedBy = "department")
    @OrderColumn(name = "index_id")
    private List<Employee> employees;

    这样您就可以同时使用 Lists and Sets用于订购集合。

    因此,请尝试坚持双向关联,因为它们是最有效的关联,并且可以更好地模拟数据库关系。如果您想要某种元素索引策略,请使用@OrderColumn关联。

    关于java - Hibernate bag 与 idbag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925196/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com