2015-11-06 69 views
0

我有一個表/類用戶和消息。一個用戶可以有很多消息。如何爲消息建模Java類;它應該有一個User類型的屬性,或者只是一個用於用戶名的字符串,這是這種關係中的關鍵?ORM - 使用整個對象或唯一標識符作爲JoinColumn?

使用Hibernate生成類時,它給了Message類一個User屬性。這是否意味着這是正確的方式?

我發現它創建消息時也給它一個用戶實例有問題,因爲我似乎無法做到這一點在我使用的Spring Webflow(我只是從視圖傳遞用戶名)。

回答

0

您可以使用OneToMany關係設計您的類,並且Message類不需要具有用戶字段。

對於爲例:

public class User { 
@OneToMany 
private List<Message> messages; 
} 

public class Message { 
@Basic 
private String body; 
} 

在這種情況下,用於信息數據庫表將具有用戶ID的列。否則

public class User { 
@OneToMany 
@JoinColumn(name="my_user_id_column") 
private List<Message> messages; 
} 

,你可以在這個answer

+0

但如果消息沒有用戶或用戶名字段,我怎麼能知道它是屬於哪個用戶?當我向數據庫中插入消息時,如何獲取值以填充用戶標識列? –

+0

在我的建議中,您應該向用戶添加消息,而不是將用戶添加到消息。所以,你將擁有用戶擁有的所有消息。 如果你真的想添加一個用戶到一個消息,你可以添加一個關係'@ ManyToOne'到消息實體。 –

+0

我認爲我現在在看完@ sanjay的答案中的視頻後就明白了。你會說這種方法總體上優於在消息中使用ManyToOne嗎?就我的目的而言,似乎有一個ManyToOne in Message適合更好。但問題是,如果我採用這種方法,那麼ManyToOne應該映射到User對象,還是隻映射一個String(用戶名)對象,因爲無論如何這將用於MessageDao? –