Hibernate API是否支持List之外的集合形式的對象結果集?Hibernate能否返回一個比List更爲結果對象的集合?
例如,我有一個運行數十萬次迭代的過程,以便爲客戶端創建一些數據。此過程使用Value表中的記錄(例如)爲每個迭代創建此輸出。
隨着列表我將不得不遍歷整個列表,以找到一個特定的價值,這是昂貴的。我希望能夠返回一個TreeMap並以編程方式指定一個鍵,以便我可以在集合中搜索我需要的特定值。 Hibernate可以爲我做這個嗎?
Hibernate API是否支持List之外的集合形式的對象結果集?Hibernate能否返回一個比List更爲結果對象的集合?
例如,我有一個運行數十萬次迭代的過程,以便爲客戶端創建一些數據。此過程使用Value表中的記錄(例如)爲每個迭代創建此輸出。
隨着列表我將不得不遍歷整個列表,以找到一個特定的價值,這是昂貴的。我希望能夠返回一個TreeMap並以編程方式指定一個鍵,以便我可以在集合中搜索我需要的特定值。 Hibernate可以爲我做這個嗎?
我想你指的是Query.list()
方法。如果是這樣:否,除了List
以外,沒有辦法返回頂級結果。如果您收到的結果太多,爲什麼不向數據庫發出更受限制的查詢?如果查詢難以限制,您可以使用Hibernate的List
的內容填充自己的Map
,然後丟棄列表。
從Java Persistence with Hibernate:
<map>
,保存鍵和值 對被映射。使用java.util.HashMap
至 初始化一個屬性。java.util.SortedMap
可以映射 與<map>
元件,以及排序 屬性可以被設置到任何一個 比較器或自然順序爲在內存中 排序。使用java.util.TreeMap
實例初始化 集合。就像旁邊一樣,您可以使用List/SortedList,Set/SortedSet,Map/SortedMap,Collection/Bag和primitive-array用Hibernate分組對象。 – Elie 2009-01-06 15:37:46
是的,可以做到。
但是,您可能必須讓您的域名類實現Comparable
;我認爲你不能用比較器來做。
編輯: 這似乎是我誤解了這個問題。如果您正在討論特設查詢的結果,那麼上述內容將無助於您。如果查詢是固定的,則可以通過將具有TreeMap屬性的對象綁定到數據庫視圖來使其工作。
當然,您可以隨時自行構建地圖,而且工作量和處理開銷都很小。
如果我理解正確,將數據庫中的一堆數據加載到內存中,然後通過查找該列表中的某些對象在本地使用它們。
如果是這樣,我會看到2個選項。
正如我所說的,在一般情況下,我贊成用高速緩存的解決方案...
是否有理由不能在where子句中指定您的條件? – 2009-01-06 15:35:31
我試圖將我想要使用的整個對象集合到內存中,這樣我就可以減少對數據庫的調用。如果我爲每次迭代調用一個SELECT,我正在查看成千上萬的調用,運行速度非常慢。 – karlgrz 2009-01-06 15:40:47
「所以我可以減少對數據庫的調用」 - 它似乎沒有工作,因爲你有成千上萬的電話。您可能需要更聰明的查詢或更好的緩存解決方案。 – duffymo 2009-01-07 11:08:45