我有School
和Student
實體之間的一對多映射。爲什麼hibernate返回persistantBag而不是列表?
public class School{
@oneToMany
private List<Student> students;
...
}
這是有道理的,Hibernate缺省懶洋洋地獲取學生,但我不明白我爲什麼它加載而不是Java的ArrayList自己的List實現(PersistantBag)的?
我有School
和Student
實體之間的一對多映射。爲什麼hibernate返回persistantBag而不是列表?
public class School{
@oneToMany
private List<Student> students;
...
}
這是有道理的,Hibernate缺省懶洋洋地獲取學生,但我不明白我爲什麼它加載而不是Java的ArrayList自己的List實現(PersistantBag)的?
列表是一個有序的集合。另一方面,根據Hibernate API,另一個PersistantBag是:
可以多次包含相同元素的無序無鍵集合。好奇地,Java集合API沒有Bag。大多數開發人員似乎使用List來表示bag語義,所以Hibernate遵循這種做法。
換句話說,一個包只是一個隨機的列表中的項目集合。爲了讓Hibernate把List當作一個有序的集合,它需要一個索引列(參見Indexed Collections)。但是因爲你沒有這樣的列,所以Hibernate改爲使用「bag語義」。最後,對開發者來說,這與你不同,因爲你可能不依賴訂單,但如果你確實需要它,你可以添加一個索引列來獲得這些功能。
一個包包的另一個不錯的功能是你可以獲得集合中對象的數量occurrences,而在列表中,您需要遍歷整個列表才能找到該列表。
附加信息:
Why Hibernate does "delete all then re-insert" - its not so strange