HQL,我可以参数化FROM子句吗?

时间:2014-06-26 10:13:43

标签: java hibernate jpa hql hsqldb

我有这个HQL查询:

        Query q = em.createQuery (
        "DELETE FROM Annotation a WHERE a.id IN ( " +
        "  SELECT ja.id FROM :entityName an JOIN an.annotations ja)"
    );

我被告知:QuerySyntaxException:意外令牌::靠近第1行 在FROM参数之后,我是否有希望制作实体名称?我有一个要发送到此查询的实体列表,我担心字符串连接太慢。

1 个答案:

答案 0 :(得分:1)

您无法替代实体名称参数适用于实体属性而不是代替。

您可以使用一个查询选择要删除的实体ID,然后将它们传递给第二个删除查询,但是对于READ_COMMITED事务隔离,您可能仍然会在其他人处插入一个与您的查询匹配的子实体。 SERIALIZABLE将解决这个问题。