1

School我在和Student实体之间有一对多的映射。

public class School{
   @oneToMany
   private List<Student> students;
 ...
}

默认情况下,Hibernate 懒惰地获取学生是有道理的,但我不清楚为什么它加载自己的 List (PersistantBag) 实现而不是 java ArrayList?

4

1 回答 1

0

List 是一个有序的集合。另一方面,PersistantBag (根据Hibernate API)是:

可以多次包含相同元素的无序、无键集合。奇怪的是,Java 集合 API 没有 Bag。大多数开发人员似乎都使用 Lists 来表示 bag 语义,因此 Hibernate 遵循这种做法。

换句话说,包只是列表中项目的随机集合。

为了让 Hibernate 将您的 List 视为有序集合,它需要一个索引列(请参阅索引集合)。但是由于您没有这样的列,Hibernate 而是使用“包语义”。最后,开发人员对您来说并没有太大的区别,因为您可能不依赖订单,但如果您确实需要它,您可以添加一个索引列来获得这些功能。

包的另一个不错的功能是,您可以获取集合中某个对象的出现次数,而在 List 中,您需要遍历整个列表才能找到它。

其他资源:

为什么 Hibernate 确实“删除所有然后重新插入” - 这并不奇怪

于 2012-10-03T22:48:16.080 回答