Hibernate包vs idbag

时间:2015-04-28 16:43:26

标签: java hibernate collections orm hibernate-mapping

我已经看过一个包和idbag之间的区别,我理解它们之间的区别,但我想要了解的是,如果使用包而不是idbag,反之亦然会有一些情况可能会出错。有人可以通过一个例子解释这一点。

1 个答案:

答案 0 :(得分:6)

ID Name Code 2 AB 2 3 CB 8 4 DE 7 5 FE 5 6 AE 6 7 FD 9 8 BD 3 9 DC 11 11 AC 4 是一个无序集合,与Bag不同,它不会使用额外的列来存储每个元素索引。

没有idbag可行的用例,而bag则不会。唯一的区别是他们的效率:

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

    袋子是最糟糕的情况,因为它们允许重复的元素值   并且,由于它们没有索引列,因此无法定义主键。   Hibernate无法区分重复的行。   Hibernate通过在单个中完全删除来解决此问题   删除并重新创建集合。这可以   低效的。

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

      idbag

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

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