Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot @OneToMany列表中出现意外重复项_Spring Boot_Jpa - Fatal编程技术网

Spring boot @OneToMany列表中出现意外重复项

Spring boot @OneToMany列表中出现意外重复项,spring-boot,jpa,Spring Boot,Jpa,我正在用Spring Boot和JPA开发一个web应用程序。我有一个类用户,就像在社交网络中一样,可以有追随者和追随者。我认为实现它的最好方法是创建一个类(FollowRelationship),其中有两个用户,一个跟随,另一个跟随。因此,在每个用户类中,应该有两个具有不同映射的followRelationship对象列表,一个用于followers,另一个用于followers。但我认为通过查看代码,情况会更清楚 @Entity public class User { @Id

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

@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的方法如下:

@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。如果我使用user1跟随user2,系统将在数据库中正确创建FollowRelationship元组

date:2020-02-28 14:38:39    from: user1 to: user2
有时我会想,当系统从数据库加载用户时,它会复制一些追随者或追随者,但我不明白为什么!接下来的问题是:我实施的解决方案是否有问题?是否存在这样会产生问题的特殊情况


我看到了这个问题(),它似乎讨论了相同的问题,但我不确定,因为我有一个不同的实现,它只有一个列表,我在同一个类上有两个(FollowRelationship)。更糟糕的是,我不太清楚它为什么会这样运行,

如果没有问题案例数据库表中的数据,很难说。我只能想象,有时会存储错误的重复数据。您的代码对防止这种情况几乎没有什么作用,特别是因为您使用的是一个列表来表示OneToMany关系,而不是一个集合。在数据库中没有重复项。不管怎样,你是说OneToMany rel的推荐数据类型已设置?我正在研究一个类似的问题。。。我现在想我可能需要看看我的equals和hashcode实现。。。有一些具体的事情需要考虑。。。equals方法应该只使用不可变的实体属性。。。哈希代码必须在所有实体状态转换中保持一致。。。不确定这是否会导致你的问题,但最好记住。。。弗拉德有一些关于这个话题的好文章。
date:2020-02-28 14:38:39    from: user1 to: user2