2012-08-29 40 views
0

我試圖映射一個多對多的關係,每個用戶都有一組朋友,這也是用戶。在數據庫表中,這是使用名爲user_friend的分析表來解決的。 user_friend表有兩列user1和user2,它們是用戶表中用戶標識的外鍵。Ebean ManyToMany到同一個實體

最佳解決方案是不爲user_friend表創建java ebean模型,但讓用戶模型有一組用戶,其中當前用戶是user_friend表中的user1或user2。那麼映射必須以某種方式引用user_friend表中的兩列......

這可能嗎?

編輯:SQL爲1.SQL添加

CREATE TABLE User (
id bigint(20) NOT NULL AUTO_INCREMENT, 
email varchar2(255) NOT NULL UNIQUE, 
password varchar2(255) NOT NULL, 
name varchar2(255) NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE User_friend (
id bigint(20) NOT NULL AUTO_INCREMENT, 
user1 bigint(20) NOT NULL, 
user2 bigint(20) NOT NULL, 
sent TIMESTAMP NOT NULL, 
accepted TIMESTAMP, 
PRIMARY KEY (ID), 
FOREIGN KEY(user1) REFERENCES User(id), 
FOREIGN KEY(user2) REFERENCES User(id) 
); 

的事情是,希望每一個用戶實例有一組用戶,他通過被任一用戶1或用戶2鏈接。

回答

1

這聽起來像這正是Ebean是如何將其設置爲你:

user_friend 
    user1  user2 
    (user_id) (user_id) 

你爲什麼要更改的多對多關係?你能否在'conf/evolutions/default'中爲我們提供你的1.sql文件的相關部分?

更新:

如果您的Java代碼如下所示:

@ManyToMany 
public Set<User> friends = new HashSet<User>(); 

您應該能夠通過引用user.friends得到一組朋友。

問題是它看起來像你想在User_friend表中有其他字段(發送,接受)。正因爲如此,你需要創建一個新的模型,UserFriend,公開這些領域。

+0

嗯,我不想公開這些字段,他們真的只是在那裏進行日誌記錄。我想我將不得不重新考慮我的數據結構也許..感謝您的幫助! –