给出以下代码
public class Course {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Review> reviews = new ArrayList<>();
}
public class Review {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String rating;
private String description;
}
已保存课程,有 2 条评论。
如果我尝试从课程中删除一条评论。
course.getReviews().remove(0);
Hibernate 会触发以下查询。
delete from course_reviews where course_id=?
binding parameter [1] as [BIGINT] - [1]
insert into course_reviews (course_id, reviews_id) values (?, ?)
binding parameter [1] as [BIGINT] - [1]
binding parameter [2] as [BIGINT] - [3]
请注意,它首先删除所有关系,然后插入剩余的关系。为什么会有这种行为?为什么不能更具体,只删除存储关系的一条记录。
不确定这是否是由于包语义造成的(因为你使用了List
而不是Set
供评论)或者只是因为 Hibernate 有时会进行所谓的“集合娱乐”。尝试使用Set
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)