2013-04-23 102 views
0

我想創建一個可以存儲值列表的hibernate表。我正在做的是這樣的:帶列表的休眠列

@Column(name = "userHobbies") 
@ElementCollection(targetClass = String.class) 
@CollectionTable(schema = "school", name = "hobby", joinColumns = @JoinColumn(name = "id")) 
private List<String> userHobbies= null; 

在表用戶我沒有看到一列「userHobbies」。桌子的愛好雖然是空的,但是被創造出來。任何人都可以提出一些關於如何處理這類案件的建議嗎?

編輯:

代碼中插入新記錄用戶與愛好:

ArrayList<String> hobbies= new ArrayList<String>(); 
hobbies.add(football); 
hobbies.add(soccer); 

User user = new User(); 
user.setName("ben"); 
user.setEmail("[email protected]"); 
user.setUserHobbies(hobbies); 

getDAO().makePersistent(user); 

除userHobbies其他所有字段都是正確保存。

回答

1

這是預期的結果。 @CollectionTable用於指定存儲列表的每個元素的表的名稱(name = "hobby")。 joinColumns用於指定在此愛好表中用於存儲對其擁有用戶的引用的列的名稱。 @Column用於指定保存元素值(愛好名稱)的愛好表中列的名稱。

所以你會擁有這一點,非常類似於一對多映射:

Table user: 
ID (primary key), name, ... 

Table hobby: 
ID (foreign key referencing user.ID), userHobbies 

我會說出列「愛好」或「hobbyName」,而不是「userHobbies」,因爲它擁有一個單一的愛好。

+0

只是想確保我的問題很清楚,有一個名爲User的表,其中有一個名爲userHobbies的列,其中包含用戶的業餘愛好列表。 @collectionTable創建一個表愛好來將興趣愛好與他們的ID進行映射。所以我的問題是爲什麼你建議userHobbies包含一個愛好?我想存儲一份愛好列表。 – 2013-04-23 20:43:55

+1

假設用戶1有足球和籃球作爲興趣愛好。用戶表中的用戶1將有一行,興趣表中有兩行用於興趣愛好。第一行將包含(1,'足球'),第二行將包含(1,'籃球')。這是傳統的關係數據庫設計。您沒有名爲userHobbies的列的表User。您有一個名爲User的hibernate實體,其集合爲userHobbies。你定義的映射描述了生成的模式。 – 2013-04-23 20:48:54

+0

哦,好的,謝謝。但是,當我將值插入到用戶表中時,所有值都正確存儲,但愛好表爲空。你能建議它爲什麼可以嗎? – 2013-04-23 20:52:46