2

我有这样一个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

如果我替换DELETESELECT查询按预期工作。然而,当我使用DELETE它给我一个错误

[语义错误] 第 0 行,第 7 列靠近 'i,p,d,d2,':错误:未定义类 'i'。

4

1 回答 1

1

DQL 中的 DELETE 查询不支持 JOIN,因为某些受支持的 RDBMS 不支持它。

不幸的是,您必须首先选择要删除的元素的 ID,然后执行 aDELETE FROM foo WHERE bar IN (?1)并将带有 ID 作为参数的数组传递。

从多个表中删除时,请记住使用显式事务。

考虑到底层 RDBMS 支持 DELETE 查询中的 JOIN,一种替代方法是原生查询。

于 2014-08-05T22:48:46.900 回答