0
私はアプリケーションの知識システムを設計したいと思っています。私はユーザーエンティティを持っています。私はユーザーに友人のリストを持ってほしい。これを行うには2つの方法があります。ユーザーがリストを持っている...実体の親密度システムを設計する
最初の方法
@ManyToMany
@JoinTable(
name = "user_friends",
joinColumns = {@JoinColumn(name = "to_user_id")},
inverseJoinColumns = {@JoinColumn(name = "from_user_id")}
)
private Set<FriendshipEntity> friends;
FriendshipEntity
@Entity
@Table(name = "users_friends")
public class FriendshipEntity {
@Id
@Basic(optional = false)
@Column(unique = true, nullable = false, updatable = false)
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "from_user_id", nullable = false)
private UserEntity fromUser;
@ManyToOne
@JoinColumn(name = "to_user_id", nullable = false)
private UserEntity toUser;
}
私はこのよう
fromUser.getFriends().add(new FriendshipEntity(fromUser, toUser));
toUser.getFriends().add(new FriendshipEntity(toUser, fromUser));
ための第二の方法で友情を作成しますID自体。
@ElementCollection
@CollectionTable(
name = "users_friends",
joinColumns = @JoinColumn(name = "user_id", nullable = false, updatable = false)
)
private Set<Long> friends;
作成友情
fromUser.getFriends().add(toUser.getId());
toUser.getFriends().add(fromUser.getId());
友情システムを作成することが最良のあなたの意見では方法です
?別のアイデアがあるかもしれませんか?
私の他のアイデアは、DBAにはあまり人気がありませんが、友人のListメンバーフィールドを持つ通常のPOJOオブジェクトとしてUserを構成し、それをデータベースのBLOBにシリアル化します。 –
markspace
最初のデザインは無効です。 FriendshipにManyToOne with Userがある場合、双方向結合のもう一方の側はManyToManyではなくOneToManyでなければなりません。そしてそれはmappedBy属性でマークされた反対側でなければなりません。 –