我有这样一个 dql 语句:
DELETE i, p, d, d2, s
FROM OverseerMainBundle:Image i
JOIN i.plates p
JOIN i.doc d
JOIN p.doc d2
LEFT JOIN p.symbols s
WHERE d.tag LIKE :tag
如果我将DELETE
替换为SELECT
则查询将按预期工作。但是,当我使用DELETE
时,它会给我一个错误
[语义错误] 第 0 行,第 7 行靠近"i, p, d, d2":错误:未定义类"i"。
DQL 中的 DELETE 查询不支持 JOIN,因为某些受支持的 RDBMS 不支持它。
不幸的是,您必须首先选择要删除的元素的 ID,然后执行DELETE FROM foo WHERE bar IN (?1)
并将带有 ID 的数组作为参数传递。
请记住在从多个表中删除时使用显式事务。
另一种选择是本机查询,因为底层 RDBMS 支持 DELETE 查询中的 JOIN。