2015-02-07 103 views
1

我有以下實體:多對多,只有一個集合在同一個實體中?

@Entity 
@Table(name = "users") 
public class User { 

    ... 

    private List<User> connections; 

    ... 

} 

假設有用戶。用戶A決定將用戶B添加到他的連接列表中。連接列表A必須包含用戶B和連接列表B必須包含用戶A

考慮到我的業務邏輯,我得出結論:必須使用多對多關係。我在Stackoverflow上發現了這個問題(link),但這並不是我正在尋找的。我想在實體類中只存儲一個List而不是兩個。

我該如何執行此操作?我假設必須有兩個列表來創建多對多關係,所以我想我的決定是不正確的。

回答

1

假設你有一個表user_users(user_1_id,user_2_id)在你的數據庫user S之間的許多一對多的關係,你可以做這樣的事情:

@Entity 
@Table(name = "users") 
public class User { 
    private List<User> connections; 

} 

,現在你可以擁有的getConnection getter這樣的:

@ManyToMany(targetEntity=User.class) 
@JoinTable(
    name="user_users", 
    [email protected](name="user_1_id", nullable=false), 
    [email protected](name="user_2_id", nullable=false) 
) 
public Set<ElementBean> getConnections() { 
    return connections; 
} 

,你可以像這樣將用戶添加到用戶:

public void addConnection(User usr) { 
    if (usr !=null) { 
     connections.add(usr); 
     usr.getConnections().add(this); 
    }  
} 
+0

非常感謝Farhang! – Bravo 2015-02-07 19:41:59

+0

非常歡迎。 – jfun 2015-02-08 02:45:45

相關問題