关注春天的粉丝

时间:2017-06-02 14:47:07

标签: java hibernate spring-boot spring-data-jpa

我正在尝试在Spring Boot应用程序中开发以下关注者功能。我搜索了一个例子,我看到了这个,这在开始时非常有意义:

https://github.com/SoichiSumi/Twitter-Clone/blob/master/src/main/java/yoyoyousei/twitter/clone/domain/model/User.java

我的用户有以下的ManyToMany关系,就像这样......

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "relation",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "following_id"))
private List<User> following;

我开发了我的控制器,JSP和表格,它可以很好地查看您关注的是哪个用户,但是当我尝试开发关注者时出现问题。

User_id  Following_id
1       2
1       3
1       4
1       6
2       4
2       6
  • User_ID = 1正在关注用户:2,3,4&amp; 6
  • User_ID = 4有关注者:1&amp; 2

我如何向user_id = 4的粉丝询问该表?

我认为我应该使用FollowerService和DAO,但我意识到我没有使用它的bean。 我认为我能做到的唯一方法是获取所有表并开始搜索某个following_id的所有外观以查看user_id是跟随者。

我找不到一个简单的方法来做到这一点。你觉得我应该创造一个豆子吗?怎么样?感谢

2 个答案:

答案 0 :(得分:1)

创建相反的关系:

@ManyToMany(mappedBy = "following")
private List<User> followers;

您可以通过id = 4 followers字段获取用户的关注者。

答案 1 :(得分:0)

这是我为您解决的问题的解决方案。用户类别:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    private String name;

    @OneToMany(mappedBy="to")
    private List<Followers> followers;

    @OneToMany(mappedBy="from")
    private List<Followers> following;

    public User() {}

    public User(String name) {
        this.name = name;
    }

}

如您所见,用户类别对正在关注的用户和他所关注的用户都有引用。

@Entity
public class Followers {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @ManyToOne
    @JoinColumn(name="from_user_fk")
    private User from;

    @ManyToOne
    @JoinColumn(name="to_user_fk")
    private User to;

    public Followers() {};

    public Followers(User from, User to) {
        this.from = from;
        this.to = to;
    }
}

followers类包含两个用户之间的关系,当然,您可能需要向该类添加更多信息,例如“ from”开始跟随“ to”之后。

如果您想吸引用户的关注者/关注者,您只需致电相应的获取者即可。