2016-10-19 3 views
1

я хочу, чтобы преобразовать этот запрос HQLПреобразовать запрос от SQL в 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; 

    ... 
} 

исключение:

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: '*' 
+0

показать свою следность исключений. – mhasan

+0

@mhasan i добавил Exceptioins –

+0

Мне кажется, вам нужно указать полный пакет в запросе. 'select new com.mypackage.StatisticServerDTO (...' – Gimby

ответ

0

У вас не хватает нового в запросе

@Query ("выберите НОВЫЙ StatisticServerDTO (st.status, граф (*)) от сервера s, состояние й, где" + «s. id = st.server.id и st.created = (выберите max (ss.created) из Status ss, где ss.server.id = s.id) " +" group by st.status ") Список nbrServerByStatus() ;

+0

Я добавляю его, но ничего не меняет –

+0

У вас есть тот же конструктор в DAO, что и Public StatisticServerDTO (String status, int count) {this.status = status; this.nbr = count}, а также проверить, что у вас также не должно быть конструктора Argument в вашем классе. – Navnath

+0

Да, у меня есть все это –

Смежные вопросы