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