我有这个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参数之后,我是否有希望制作实体名称?我有一个要发送到此查询的实体列表,我担心字符串连接太慢。
答案 0 :(得分:1)
您无法替代实体名称参数适用于实体属性而不是代替。
您可以使用一个查询选择要删除的实体ID,然后将它们传递给第二个删除查询,但是对于READ_COMMITED事务隔离,您可能仍然会在其他人处插入一个与您的查询匹配的子实体。 SERIALIZABLE将解决这个问题。