2012-10-03 64 views
1

我有SchoolStudent實體之間的一對多映射。爲什麼hibernate返回persistantBag而不是列表?

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

這是有道理的,Hibernate缺省懶洋洋地獲取學生,但我不明白我爲什麼它加載而不是Java的ArrayList自己的List實現(PersistantBag)的?

回答

0

列表是一個有序的集合。另一方面,根據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

相關問題