java - 将查询从 sql 转换为 hql

标签 java mysql sql hql

我想将此查询转换为 HQL

select status,count(*) from server s, status st where s.id = st.server_id and st.created = (select max(ss.created) from status ss where ss.server_id = s.id) group by st.status 

我试过了

@Query("select new StatisticServerDTO( st.status, count(*)) from Server s, Status st where "
            + "s.id = st.server.id and st.created = (select max(ss.created) from Status ss where ss.server.id = s.id)"
            + "group by st.status")
    List<StatisticServerDTO> nbrServerByStatus();

但它不起作用

我的返回类是这样的:

public class StatisticServerDTO{

    private String status;
    private int nbr;

   ...
}

异常(exception)情况是:

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'StatisticServerDTO' {originalText=StatisticServerDTO}
    \-[EXPR_LIST] SqlNode: 'exprList'
       +-[DOT] DotNode: 'status1_.status' {propertyName=status,dereferenceType=PRIMITIVE,getPropertyPath=status,path=st.status,tableAlias=status1_,className=com.example.beans.Status,classAlias=st}
       |  +-[ALIAS_REF] IdentNode: 'status1_.id' {alias=st, className=com.example.beans.Status, tableAlias=status1_}
       |  \-[IDENT] IdentNode: 'status' {originalText=status}
       \-[COUNT] CountNode: 'count'
          \-[ROW_STAR] SqlNode: '*'

最佳答案

您的查询中缺少 New

@Query("select NEW StatisticServerDTO( st.status, count(*)) from Server s, Status st where " + "s.id = st.server.id and st.created = (select max(ss.created) from Status ss where ss.server.id = s.id)" + "按 st.status 分组") 列出 nbrServerByStatus();

关于java - 将查询从 sql 转换为 hql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40137057/

相关文章:

mysql - 你能从mysql中的存储过程中同时获得表中的记录和总记录数吗?

mysql - 从多个值计算最大的单个间隙

sql - 从嵌套在 CASE MySQL 中的 SELECT 返回多列

php - 尝试将子值保存在数据库中时,变量数量与准备好的语句中的参数数量不匹配

java - 如何在 JDBC 中检测列类型并插入数据?

java - 本地 (Windows/IntelliJ) 和远程 (Linux) 之间的 Maven 构建有何差异?

java设计模式的使用

java - 从 JTextField 获取字符串输入并将该字符串设置为 JLabel

sql - 在 3 个表上选择 count(*) 和 "join"

sql - 如何使用 VBA 或宏更新具有 Access 窗体的表?