School
我在和Student
实体之间有一对多的映射。
public class School{
@oneToMany
private List<Student> students;
...
}
默认情况下,Hibernate 懒惰地获取学生是有道理的,但我不清楚为什么它加载自己的 List (PersistantBag) 实现而不是 java ArrayList?
School
我在和Student
实体之间有一对多的映射。
public class School{
@oneToMany
private List<Student> students;
...
}
默认情况下,Hibernate 懒惰地获取学生是有道理的,但我不清楚为什么它加载自己的 List (PersistantBag) 实现而不是 java ArrayList?
List 是一个有序的集合。另一方面,PersistantBag (根据Hibernate API)是:
可以多次包含相同元素的无序、无键集合。奇怪的是,Java 集合 API 没有 Bag。大多数开发人员似乎都使用 Lists 来表示 bag 语义,因此 Hibernate 遵循这种做法。
换句话说,包只是列表中项目的随机集合。
为了让 Hibernate 将您的 List 视为有序集合,它需要一个索引列(请参阅索引集合)。但是由于您没有这样的列,Hibernate 而是使用“包语义”。最后,开发人员对您来说并没有太大的区别,因为您可能不依赖订单,但如果您确实需要它,您可以添加一个索引列来获得这些功能。
包的另一个不错的功能是,您可以获取集合中某个对象的出现次数,而在 List 中,您需要遍历整个列表才能找到它。
其他资源: