当我从具有其他外键的表中删除一个条目时,相应的记录也不会被删除
Posted
技术标签:
【中文标题】当我从具有其他外键的表中删除一个条目时,相应的记录也不会被删除【英文标题】:When I delete an entry from a table which has foreign keys to others, the corresponding records are not deleted as well 【发布时间】:2019-06-12 14:53:18 【问题描述】:我有一个表(实体),我根据来自 Java 中不同实体的 ID 从其中删除了一些条目。
这个表有其他表的外键,假设字段是 ID1 和 ID2。 当我使用 HQL 查询删除带有 ID 的条目时,带有 ID1 和 ID2 的条目仍然存在。 那些具有 ID1 和 ID2 的实体与 @ManyToOne(CascadeType.ALL) 连接,所以我不能使用 orphanRemoval = true..
有人知道我应该怎么做吗?
实体类:
@ManyToOne(targetEntity = First.class, cascade = CascadeType.ALL)
@JoinColumn(name = "ID_LINE_HEADER")
private First lineHeader;
@ManyToOne(targetEntity = Second.class, cascade = CascadeType.ALL)
@JoinColumn(name = "ID_LINE_CONTENT")
private Second lineContent;
查询:
@Query(value = "" +
"Delete " +
"from " +
" Entity u " +
"where " +
" u.JobExecutionId = :JobExecution ")
【问题讨论】:
您描述的行为是人们通常想要的。级联删除从“一”端到“多”端有意义,但很少从“多”端到“一”端。 How to Delete using INNER JOIN with SQL Server?的可能重复 不,不相关 JPA delete all entites works strange的可能重复 通过 JPQL 批量删除不会触发级联。请参阅上面引用的问题和答案。级联删除只能通过entityManager.remove(e)
触发
【参考方案1】:
转到关系的另一端(在您的情况下为 First
和 Second
类),其中您有 @OneToMany
注释并将 orphanRemoval
属性设置为 true
。
就像这样:
@OneToMany(mappedBy = "lineHeader", orphanRemoval = true)
【讨论】:
以上是关于当我从具有其他外键的表中删除一个条目时,相应的记录也不会被删除的主要内容,如果未能解决你的问题,请参考以下文章