我已经看过袋子和idbag的区别,我了解它们之间的区别,但是我想理解的是,如果使用bag而不是idbag,情况可能会出错,反之亦然。有人可以举例说明。

最佳答案

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

没有用例bag有效而idbag无效的用例。唯一的区别是它们的效率:


Bags are the most efficient inverse collection,但它们对于单向一对多关联的效果不佳:



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



idbag是传统的休眠映射,用于提供more efficient unidirectional associations alternative


您可以使用JPA @OrderColumn批注定义idbag语义:

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


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

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

09-27 03:19