我有一個表/類用戶和消息。一個用戶可以有很多消息。如何爲消息建模Java類;它應該有一個User類型的屬性,或者只是一個用於用戶名的字符串,這是這種關係中的關鍵?ORM - 使用整個對象或唯一標識符作爲JoinColumn?
使用Hibernate生成類時,它給了Message類一個User屬性。這是否意味着這是正確的方式?
我發現它創建消息時也給它一個用戶實例有問題,因爲我似乎無法做到這一點在我使用的Spring Webflow(我只是從視圖傳遞用戶名)。
我有一個表/類用戶和消息。一個用戶可以有很多消息。如何爲消息建模Java類;它應該有一個User類型的屬性,或者只是一個用於用戶名的字符串,這是這種關係中的關鍵?ORM - 使用整個對象或唯一標識符作爲JoinColumn?
使用Hibernate生成類時,它給了Message類一個User屬性。這是否意味着這是正確的方式?
我發現它創建消息時也給它一個用戶實例有問題,因爲我似乎無法做到這一點在我使用的Spring Webflow(我只是從視圖傳遞用戶名)。
您可以使用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
使用@JoinTable
喜歡請觀看此視頻鏈接的解釋簡單的方法冬眠bean類關係@OneToMany和@ManyToOne
JoinColumn
指定另一個columnn
但如果消息沒有用戶或用戶名字段,我怎麼能知道它是屬於哪個用戶?當我向數據庫中插入消息時,如何獲取值以填充用戶標識列? –
在我的建議中,您應該向用戶添加消息,而不是將用戶添加到消息。所以,你將擁有用戶擁有的所有消息。 如果你真的想添加一個用戶到一個消息,你可以添加一個關係'@ ManyToOne'到消息實體。 –
我認爲我現在在看完@ sanjay的答案中的視頻後就明白了。你會說這種方法總體上優於在消息中使用ManyToOne嗎?就我的目的而言,似乎有一個ManyToOne in Message適合更好。但問題是,如果我採用這種方法,那麼ManyToOne應該映射到User對象,還是隻映射一個String(用戶名)對象,因爲無論如何這將用於MessageDao? –