【发布时间】:2016-07-23 05:38:52
【问题描述】:
我需要在操作同一张表时从表中删除。JPA 查询是
DELETE FROM com.model.ElectricityLedgerEntity a
Where a.elLedgerid IN
(SELECT P.elLedgerid FROM
(SELECT MAX(b.elLedgerid)
FROM com.model.ElectricityLedgerEntity b
WHERE b.accountId='24' and b.ledgerType='Electricity Ledger' and b.postType='ARREARS') P );
我收到了这个错误:
根本原因是 org.hibernate.hql.ast.QuerySyntaxException:意外 令牌:(靠近第 1 行,第 109 列 [DELETE FROM com.bcits.bfm.model.ElectricityLedgerEntity a 其中 a.elLedgerid IN ( 选择 P.elLedgerid FROM ( 选择 MAX(b.elLedgerid) FROM com.bcits.ElectricityLedgerEntity b WHERE b.accountId='24' 和 b.ledgerType='Electricity Ledger' 和 b.postType='ARREARS') P ) ] 在 org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 在 org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 在 org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) 在 org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
在 mysql 终端上运行相同的查询,但这不适用于 jpa。谁能告诉我如何使用 jpa 编写此查询。
【问题讨论】:
-
它会告诉您问题出在哪里......该查询中的第 109 列(字符)。将其与 JPQL 规范进行比较,您就有了答案
-
您要删除最大 ID 的
ElectricityLedgerEntity吗? -
@ujulu 是的,我想删除具有最大 ID 的 ElectricityLedgerEntity。
-
由于您似乎不想查看字符 109,因此它是您在 SUBQUERY 中的 FROM 子句。根据 JPA 规范,您不能将 SUBQUERY 作为 FROM 候选对象
-
使用 JOIN 转换为多表 DELETE,而不是 IN(SELECT...)。
标签: java mysql hibernate jpa mariadb