我想为应用程序设计一个知识系统。我有一个用户实体。我希望用户有一个朋友列表。有两种方法可以做到这一点。
实体的第一种方式..用户有一个列表
@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());
您认为哪种方式最适合建立友谊系统?也许你有另一个想法?
答案 0 :(得分:0)
如果您有幸选择数据存储,我建议您使用图形数据库。图形数据库更适合这种用例,一种强调关系的系统,而不是SQL数据库。图形数据库允许您创建比SQL数据库更加优雅和高效的更复杂的查询。有关朋友图表的示例,请参阅Neo4j的this link。
您的第一种方法与使用Spring Data Neo4j实施该方法的方法完全相同,只是使用不同的注释。