我想将此查询转换为 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/