Java 预期关闭,已找到';何时';靠近第1行的异常?如何在冬眠状态下摆脱它

Java 预期关闭,已找到';何时';靠近第1行的异常?如何在冬眠状态下摆脱它,java,mysql,hibernate,Java,Mysql,Hibernate,我在Java Hibernate中的查询中使用了WHEN-CASE条件。该查询在MySQL工作台中运行良好,但在Java控制台中出现了此异常 :org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'WHEN' near line 1. 这是我的疑问 StringBuffer hql = new StringBuffer(); hql.append(" SELECT ");

我在Java Hibernate中的查询中使用了WHEN-CASE条件。该查询在MySQL工作台中运行良好,但在Java控制台中出现了此异常

:org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'WHEN' near line 1.
这是我的疑问

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");

我有这种情况已经12个月了,语法有什么问题吗?有人能解释吗?

我想你有语法错误,因为as结束as jan

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

删除上面jan之后的逗号,然后再次检查-我想它会起作用。

发现语法错误。错过了一笔期末括号金额(v.Month101”)


谢谢你的建议。

以1月结束,
这里有语法错误。请删除逗号,然后再试一次。@Samir,我想我需要它,我有12个月的类似条件,在41个WHEN-CASE条件之后,我将再次以2月结束,以3月结束等等。因此,请确保在12月的最后一个日期之后,没有多余的逗号。请不要使用StringBu因为它在十多年前就被StringBuilder取代了。在这种情况下,在字符串之间使用
+
会更简短、更有效。@PeterLawrey,谢谢你的建议。我会实现它。我想我会需要它,我有12个月的类似条件,在41个WHEN-case条件之后,我会再次以2月结束,以2月结束mar等等。在最后一个CASE-WHEN条件之后,我的END后面没有逗号作为dec。@NikhilBharadwaj-不管怎样,删除它怎么样?FROM的
前面不应该有逗号@Stephen,是的,你是对的。FROM之前不应该有逗号