【发布时间】:2015-12-14 18:45:54
【问题描述】:
我在 PostgreSQL 客户端控制台中测试了以下 SQL 查询,效果很好:
SELECT document_url FROM signature_transaction WHERE app_id = 2 GROUP BY document_url HAVING COUNT(CASE WHEN response_delivered THEN 1 ELSE 0 END) = COUNT(id);
然后我尝试在 Java 代码中做同样的事情,使用这样的 NamedQuery:
SELECT t.documentUrl FROM SignatureTransaction t WHERE t.appId = :appId GROUP BY t.documentUrl HAVING COUNT(CASE WHEN t.responseDelivered THEN 1 ELSE 0 END) = COUNT(t.id)
但我在部署应用程序时收到以下错误:
ERROR [org.hibernate.internal.SessionFactoryImpl] (ServerService Thread Pool -- 86) HHH000177:
Error in named query: SignatureTransaction.findUrlOfDeliveredDocuments:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: responseDelivered near line 1, column 133
[SELECT t.documentUrl FROM org.app.model.SignatureTransaction t WHERE t.appId = :appId GROUP BY t.documentUrl HAVING COUNT(CASE WHEN responseDelivered THEN 1 ELSE 0 END) = COUNT(t.id)]
我尝试在 COUNT() 中使用所有这些名称,但没有一个有效:
responseDeliveredt.responseDeliveredresponse_deliveredorg.app.model.SignatureTransaction.responseDelivered
编写此 HQL 的正确方法是什么?
【问题讨论】:
标签: java hibernate case hql having