设计熟悉系统

时间:2017-12-12 23:58:15

标签: java spring hibernate spring-mvc spring-boot

我想为应用程序设计一个知识系统。我有一个用户实体。我希望用户有一个朋友列表。有两种方法可以做到这一点。

实体的第一种方式..用户有一个列表

@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());

您认为哪种方式最适合建立友谊系统?也许你有另一个想法?

1 个答案:

答案 0 :(得分:0)

如果您有幸选择数据存储,我建议您使用图形数据库。图形数据库更适合这种用例,一种强调关系的系统,而不是SQL数据库。图形数据库允许您创建比SQL数据库更加优雅和高效的更复杂的查询。有关朋友图表的示例,请参阅Neo4j的this link

您的第一种方法与使用Spring Data Neo4j实施该方法的方法完全相同,只是使用不同的注释。