我有这样一个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'。
答案 0 :(得分:1)
DQL中的DELETE查询不支持JOIN,因为某些受支持的RDBMS不支持它。
不幸的是,您必须先选择要删除的元素的ID,然后执行DELETE FROM foo WHERE bar IN (?1)
并传递带有ID作为参数的数组。
从多个表中删除时,请记住使用显式事务。
另一种选择是本机查询,因为底层RDBMS支持DELETE查询中的JOIN。