gpt4 book ai didi

java - 如何在 HQL 中的 HAVING COUNT() 中使用 CASE?

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:41 24 4
gpt4 key购买 nike

我在 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() 中使用所有这些名称,但没有成功:

  • 响应已交付
  • t.responseDelivered
  • response_delivered
  • org.app.model.SignatureTransaction.responseDelivered

编写此 HQL 的正确方法是什么?

最佳答案

尝试检查 SignatureTransaction 实体是否具有 responseDelivered 字段及其名称设置是否正确。注意 HSQL 不会看到表的名称列,而只会看到实体中的名称字段,这一点很重要。

关于java - 如何在 HQL 中的 HAVING COUNT() 中使用 CASE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com