1. 程式人生 > >hibernate多對多,多對一對映時用set,bag,list,array時有什麼區別?

hibernate多對多,多對一對映時用set,bag,list,array時有什麼區別?

簡單的說,這些集合類除了bag,都有其對應的JDK中介面的語義。它們都可以表示一對多或多對多。
Set對應於java.util.Set介面,表示一個沒有重複元素的集合。
怎樣區別重複元素?這就涉及到物件的同一性。我們知道在資料庫中,我們用主鍵來區分每一條記錄,在Java的物件世界中,我們是用Object.equals()方法來區分是否是等價的物件。
set保證,在這個集合中,沒有重複的物件。即,沒有任何物件之間用equals比較返回true。如果我們正確地覆蓋了entity類中的equals方法,我們就能保證在set對映中,set沒有重複物件。
bag沒有對應語義的JDK介面,它對應的是java.util.Collection介面,它表示一個可以有重複元素的集合。
list對應JDK的java.util.List介面,可以有重複元素。
array對應物件陣列,Hibernate也不建議使用。
除了上面的集合類,還有一個map對映,對應java.util.Map,當然語義上說就是值名對。