@OneToMany列表中出现意外重复

时间:2020-02-28 14:49:32

标签: spring-boot jpa

我正在使用Spring Boot和JPA开发一个Web应用程序。我有一个类User,就像在社交网络中一样,可以有关注者和关注者。我认为最好的实现方法是创建一个类(FollowRelationship),其中有两个用户,一个用户跟随,另一个用户跟随。因此,在每个User类中,应该有两个具有不同映射关系的FollowRelatioship对象列表,一个用于关注者,另一个用于以下对象。但是我认为通过查看代码,情况会更清楚。

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer userId;

    @OneToMany(mappedBy="to", cascade = CascadeType.ALL, orphanRemoval=true)
    private List<FollowRelationship> followers = new ArrayList<>();

    @OneToMany(mappedBy="from", cascade = CascadeType.ALL, orphanRemoval=true)
    private List<FollowRelationship> followings = new ArrayList<>();
...
}

以及FollowRelationship类:

@Entity
public class FollowRelationship {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long followRelationshipId;
    private Date date;

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

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

    public FollowRelationship(Date date, User from, User to) {
       this.date = date;
       this.from = from;
       this.to = to;
    }

...

}

用于创建FollowRelationship的方法如下:

@Override
public void follow(Long followerId, Long followedId) throws UserNotFoundException {
    User follower = getByUsername(followerId);
    User followed = getByUsername(followedId);
    follower.addFollowing(new FollowRelationship(new Date(), follower, followed));
    this.userRepository.save(follower);
}

假设我们在数据库中有两个用户,user1和user2。如果我跟随user2和user1,系统将在数据库内部正确创建一个FollowRelationship元组。

date:2020-02-28 14:38:39    from: user1 to: user2

有时认为,当系统从数据库中加载用户时,它会复制一些关注者或某些关注者,但我不明白为什么!那么问题是:我实施的解决方案有问题吗?在某些情况下会产生问题吗?

我看到了似乎在谈论同一问题的问题(Duplicates in OneToMany annotated List),但是我不确定,因为我有一个不同的实现,它只有一个List,在同一个Class上有两个(FollowRelationship)。甚至我还不确定为什么会这样,

0 个答案:

没有答案