繁体   English   中英

如何使用 JPQL 删除 ManyToMany 项目?

[英]How to delete a ManyToMany item using JPQL?

我有两个模型,比如说:

BlogPost(title, message)
Tags(name)

两者都定义了多对多关系。

使用 JPQL,我使用以下查询删除了BlogPost列表:

DELETE FROM BlogPost b WHERE b IN :list

(:list 是来自先前 SELECT 请求的列表)。

这样做,由于BlogPostTags之间的关系,我有一个ConstraintViolationException

有没有办法在不使用 JPQL 删除标签的情况下删除关系?

谢谢你的帮助!

在删除实体之前,您必须先删除关联。

JPA 创建一个表 BlogPost_Tags 存储 BlogPost 的 ID 和标签。

因此,当您尝试删除 BlogPost 时,BlogPost_Tags 上的约束失败。

删除 Post 之前需要先删除关系,JPQL 中没有简单的方法,必须使用 EntityManager。

我会用我提出的解决方案来回答自己。 我不确定它是不是最好的,但至少它有效。

由于您要批量删除具有 ManyToMany 相关项目的内容,因此您首先必须删除关系(在连接表中),或者执行循环并为每个项目手动删除(疯狂且过于繁重)。

因此,由于 JPQL 不允许这样做,一种可能的方法是进行原生 SQL 查询以删除相关表中所需的 id,然后进行批量删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM