首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >孤立删除不能正常工作

孤立删除不能正常工作
EN

Stack Overflow用户
提问于 2018-06-10 00:46:38
回答 1查看 812关注 0票数 0

我有一个一对多的集合,注释如下

代码语言:javascript
复制
@Entity
@Table(name = "students")
public class Student {
    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @OrderColumn(name ="index")
    private List<Preference> preferences;
}

首选项实体

代码语言:javascript
复制
@Entity
@Table(name = "preferences")
public class Preference {
    // id
    @ManyToOne
    @JoinColumn(name = "student_id")
    private Student student;

    @ManyToOne
    @JoinColumn(name = "project_id")
    private Project project;
    private Integer index;
}

我尝试从列表中删除一个元素,如下所示:

代码语言:javascript
复制
public void removePreference(Preference preference) {
    preferences.remove(preference);
    preference.setStudent(null);
}

以上代码不起作用,实体未从表中删除。我如何才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 03:14:04

假设ProjectPreference的关系的定义方式与StudentPreference的定义方式相同,那么您的问题来自于您的Preference实体是另外两个实体的子级。

当您将其从学生的首选项中删除时,Hibernate会将其标记为已删除的实体,但由于它仍被项目引用,因此Hibernate将重新管理它,正如在此用例的JPA specification中指定的那样。查看3.2.2和3.2.3节关于持久化和删除的信息。

为了解决您的问题,您可以从所有方面删除它,或者检查StudentProject之间的@ManyToMany关系是否不适合使用Preference作为连接表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50776479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档