JPA @OneToMany-设置与列表-使用设置时无法从双向关联中删除一个子实体

问题描述 投票:1回答:1

如果使用Set,则无法从OneToMany关联中删除子实体。如果我使用List而不是Set],一切正常

Post.java

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;

public void addComment(Comment comment) {
    if (comments == null) {
        comments = new ArrayList<>();
    }
    comment.setPost(this);
    comments.add(comment);
}

public void removeComment(Comment comment) {
    if (comments == null || comments.isEmpty()) {
        return;
    }
    comments.remove(comment);
    comment.setPost(null);
}

Comment.java

@ManyToOne(fetch = FetchType.LAZY)
@EqualsAndHashCode.Include
private Post post;

示例应用代码可在Github上找到

  • [master分支正在使用Set,并且测试用例失败
  • [list分支正在使用'List`并且测试用例通过
  • 不确定我是否犯错。请提出建议。

如果使用Set,则无法从OneToMany关联中删除子实体。如果我使用List而不是Set Post,则一切正常。java @OneToMany(mappedBy =“ post”,级联= CascadeType.ALL,...

java hibernate jpa spring-data-jpa one-to-many
1个回答
1
投票

您的测试断言Post.comments的大小。它也是@Transactional,表示postRepository.getOne()返回您在持久性上下文中已经拥有的Post完全相同的实例

© www.soinside.com 2019 - 2024. All rights reserved.