/ / esperando CLOSE, encontrou 'WHEN' perto da exceção da linha 1? Como se livrar dele no HIbernate - java, mysql, hibernate

esperando FECHAR, encontrado 'WHEN' perto da exceção da linha 1? Como se livrar dele no HIbernate - java, mysql, hibernate

Estou usando uma condição WHEN CASE na minha consulta no Java Hibernate. A consulta funciona bem no ambiente de trabalho MySQL, mas me dá essa exceção no console Java.

:org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found "WHEN" near line 1.

Esta é a minha consulta,

StringBuffer hql = new StringBuffer();


hql.append(" SELECT ");
hql.append(" v.year,");
hql.append(" v.number,");
hql.append(" ap.property,");
hql.append(" CASE");
hql.append(" WHEN ap.id = 1  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 2  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 3  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 4  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 5  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 6  THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 7  THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 8  THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 9  THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 10 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 11 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 12 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 13 THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 14 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 15 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 16 THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 17 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 18 THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 19 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 20 THEN AVG(v.Month101)");
hql.append(" WHEN ap.id = 21 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 22 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 23 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 24 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 25 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 26 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 27 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 28 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 29 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 30 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 31 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 32 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 33 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 34 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 35 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 36 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 37 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 38 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 39 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 40 THEN SUM(v.Month101)");
hql.append(" WHEN ap.id = 41 THEN SUM(v.Month101)");
hql.append(" END AS jan,");
hql.append(" FROM");
hql.append(" table1 v,");
hql.append(" table2 ap");
hql.append(" WHERE");
hql.append(" v.number=01");
hql.append(" AND v.Id = ap.id");
hql.append(" AND v.year =2015");
hql.append(" GROUP BY ap.property");
hql.append(" ORDER BY v.Id");

Eu tenho essas condições por 12 meses, o que há de errado com a sintaxe? Alguém pode explicar?

Respostas:

0 para resposta № 1

Eu acho que você tem um erro de sintaxe devido a uma vírgula dispersa depois de END AS jan

hql.append(" END AS jan,");
hql.append(" FROM");

Remova a vírgula após jan acima e verifique novamente - acho que funcionaria.


0 para resposta № 2

Encontrado o erro de sintaxe. Perdera um colchete de fechamento SUM (v.Mês101 ");

Obrigado pelas sugestões.