【问题标题】:JPA CascadeType.ALL not deleting childJPA CascadeType.ALL 不删除孩子
【发布时间】:2019-02-25 18:33:08
【问题描述】:

我在 java 中有 2 个具有父子关系的类,我在删除子时遇到了问题。当我删除一个孩子时,函数返回 true,但是当我检查数据库时没有任何反应,孩子仍然没有被删除。

这是我的班级家长:Engagement.java

@OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade=CascadeType.ALL)
 private Collection<Sub_Engagement> subs_engs;

这是我的班级孩子:Sub_Engagement.java

@ManyToOne
 @JoinColumn(name="parent")
 private Engagement parent;

使用此代码 POST/GET/PATCH 可以正常工作,但 DELETE 无法正常工作。

我尝试了这样的解决方案:

@OneToMany(fetch=FetchType.EAGER, mappedBy="parent", orphanRemoval = true, cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE})
 private Collection<Sub_Engagement> subs_engs;

当我尝试更新孩子时,DELETE 有效,但 PATCH/PUT 无效。 在此先感谢:)

【问题讨论】:

    标签: java hibernate spring-boot jpa jakarta-ee


    【解决方案1】:

    Andronicus 说得对,这真的应该起作用。很奇怪,您在更新和删除时遇到了非此即彼的情况。

    仔细检查您的 persistence.xml。有什么东西会覆盖注释吗?

    我还建议启用跟踪并检查实际执行的 sql 查询。是否记录了删除语句?你的交易真的提交了吗?

    我们可以看看您用于删除实体的代码吗?你是在使用 entitymanager 的 remove() 方法还是在执行一些自定义 jpql?

    另外,您是使用 CMT(例如 EJB)还是通过 JTA 自己处理事务?

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2010-09-23
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多