1

ユーザークラスがあり、ユーザーには友達のリストが必要です。友達もユーザーであるため、すべてのユーザーには多くの友達が必要であり、明らかにそれらの友達(ユーザー)のそれぞれにも多くの友達(ユーザー)がいます。

したがって、これまでのところ、ユーザーの多対多の関係が想定されています。これは現在私が使用しているコードです(ハイバネーションJPAアノテーション付き)

ここに私の MyUser コードがあります:

@Entity
public class MyUser {

@Id
private String username;
private String userPassword;

@ManyToMany
  @JoinTable(
  name="USR_USR",
  joinColumns={@JoinColumn(name="USR1_ID", referencedColumnName="USERNAME")},
  inverseJoinColumns={@JoinColumn(name="USR2_ID", referencedColumnName="USERNAME")})
private List<MyUser> friends = new ArrayList<MyUser>();

public void setUsername(String username) {
    this.username = username;

public void setUserPassword(String userPassword) {
    this.userPassword = userPassword;
}

public String getUsername() {
    return username;

public String getUserPassword() {
    return userPassword;
}

public void setFriends(List<MyUser> friends) {
    this.friends = friends;
}

public List<MyUser> getFriends() {
    return friends;
}

USERNAME 列をそれ自体と結合して 2 番目のテーブルを作成しようとしています (正直言って、これは正しくないように思えます)。

したがって、各 MyUser が多くの MyUser を持つことができる関係をデータベースに作成しようとしています。

私はこれにかなりこだわっているので、助けていただければ幸いです。どうもありがとう!

4

1 に答える 1

2

データベース スキーマを次のように変更することをお勧めします。

MyUser(id, ....);
Friends(id1, id2);

ここで、MyUser.id は MyUser の主キーで、Friend id1 と id2 は MyUser.id の外部キーです。

これは非常に一般的なパターンであり、将来的に問題が少なくなり、メンテナンスも容易になります。ユーザー A (ID 1) は、ユーザー B (ID 2) のフレンドであり、フレンド データベースにタプル (1, 2) がある場合です。

それが役立つことを願って、

于 2013-02-01T00:01:39.630 に答える