NHibernate映射文件中的列表,集合和包有什麼區別?每個與.NET集合有什麼關係?NHibernate映射文件中的列表,集合和包有什麼區別
回答
NHibernate的語義:
列表:有序實體收集,複製允許的。在代碼中使用.NET
IList
。索引列需要在NHibernate中映射。設置:唯一實體的無序集合,不允許重複。代碼中使用
Iesi.Collection.ISet
(v4之前的NH)或System.Collections.Generic.ISet
(NH v4 +)。重寫GetHashCode
和Equals
以指示重複的業務定義。可以通過定義一個orderby或通過定義一個導致SortedSet
結果的比較器來排序。Bag:無序的實體列表,允許重複。在代碼中使用.NET
ICollection<T>
。該列表的索引列未被映射,並且不被NHibernate支持。
那麼主要的區別是列表有一個隱含的排序順序元素,由它們在列表中的位置索引。套件和行李通常也可以通過Comparator或order by子句進行「訂購」,當這些物品從數據庫中出來時可以應用。就我個人而言,我從來沒有使用過袋子......如果我知道我想要的數據是按順序排列的,那麼我使用List,否則我使用Set。
設置不允許您在其中重複元素。如果您嘗試添加一些新元素,則會比較(使用等於方法)已添加的每個元素,並且如果一個元素回退爲true,則不會添加元素
所有NHibernate中的這些對象與這些抽象數據類型(ADT)的其他實現完全相同。我很驚訝在網上找到套裝和手袋有多困難,因爲這些名字對於其他事物的共同點很常見,所以我在這裏列出了一些鏈接和描述。
如需更詳細的信息,看看下面的例子: Lists, Sets和 Bags
的一般規則是:
列表默認情況下下令,如果你想用這些能夠通過其索引拉出一個對象,或者對foreach
循環有一個奇怪的喜歡for
循環。您不需要按照您在Linked List需要的順序訪問它們。這個ADT允許重複。
請注意!儘管列表按照BryanD在答案中提到的順序排列,但完全沒有任何說法指出,除非您通過命令指定命令,否則執行HQL查詢時必須按照您對數據庫的預期順序排列。正因爲如此,有些人喜歡用Set或Bags來代替,所以它不會給人以命令的幻覺。雖然我這樣說,但大多數時候它們看起來都是按照可見的順序排列的,因爲它們是按NHibernate運行的查詢中的順序添加到列表中的。
集合是不是默認情況下,你不能直接通過索引訪問任何變量。在默認情況下,僅在上述三個中保留ADT,其保持對象的唯一性。如果你有一個集合,如果你不需要包含重複的東西,這些都很棒。
袋(或多重集)是,如可以從上面的鏈接看到,類型集,其確實允許在其內的對象是其他對象的副本。這些通常不被使用,因爲列表排序可以被忽略,因此被當作一個Bag。
關於如何在NHibernate中使用這些數據,根據您在此處選擇的ADT,沒有任何數據從數據庫中被取出,這是您希望使用它的原因,因爲這會讓您選擇不同的ADT。
就個人而言,我使用集合的大多數事情,因爲我通常要求子對象是唯一的,並且排序不是問題。雖然我會使用列表,我有一組對象,我想按某種東西排序,例如時間,爲了達到這個順序,我需要在HQL查詢中手動設置「order by」。
- 1. NHibernate - 映射組件集合?
- 2. NHibernate的映射與鑑別集合
- 3. 寫入文件和映射內存之間有什麼區別?
- 4. 彈簧請求映射和URL映射有什麼區別?
- 5. 哈希映射和併發哈希映射有什麼區別?
- 6. JPA(Hibernate)列映射中的基本類和包裝類有什麼區別?
- 7. NHibernate映射代碼映射集合
- 8. 如何映射Nhibernate集合
- 9. nhibernate:如何映射集合
- 10. NHibernate查詢映射集合
- 11. 組件集合映射NHibernate的3.2
- 12. NHibernate中StatelessSession和Session有什麼區別?
- 13. NHibernate的多列映射集
- 14. 列表中的:::和++有什麼區別?
- 15. NHibernate映射集合沒有外鍵
- 16. 在PHP中的內存映射文件,有什麼區別php:// temp和php:// memory
- 17. NHibernate中的多對多集合映射
- 18. NHibernate映射文件中的hbm代表什麼?
- 19. 在計算機圖形學中,UVW映射和UV映射有什麼區別?
- 20. 接口映射和中介模塊有什麼區別?
- 21. llblgen和nHibernate有什麼區別?
- 22. NHibernate - ManagedWebSessionContext和WebSessionContext有什麼區別?
- 23. 哈希映射,哈希集合,哈希字典之間有什麼區別?
- 24. 映射集NHibernate的
- 25. Hibernate中的包和列表有什麼區別?
- 26. 我的NHibernate映射有什麼問題?
- 27. cmd文件中%和%%有什麼區別?
- 28. salesforce中的配置文件和權限集有什麼區別?
- 29. 異常NHibernate的集合/繼承映射
- 30. NHibernate - 如何映射樹的集合
3.應該是ICollection代碼否? –
Firo
2011-11-24 08:59:40
Re:#2,我們不能只用常規的'ISet'而不是'Iesi'嗎? – 2016-07-25 19:42:06
@SergeyTachenov:有關可能的答案,請參閱http://stackoverflow.com/questions/9222058/can-net-4-iset-hashset-replace-nhibernate-iesi-collections-iset-hashset。當寫這個答案ISet不是.net的一部分.net – 2016-07-25 19:46:43