使用hql的QuerySyntaxException

时间:2016-01-22 08:41:11

标签: hibernate sql-server-2012 hql

我在tomcat上部署以下查询时遇到异常:

@Query("select max(cast(substring(r.reference,9,4) as decimal(4,0))) from RequestDbo r  where substring(r.reference,0,9) = :referenceRoot")
Long getMaxReference(@Param("referenceRoot") String referenceRoot);

该例外是:

  

org.hibernate.hql.internal.ast.QuerySyntaxException:期待CLOSE,找到'('靠近第1行,第54列[select   来自RequestDbo的max(cast(substring(r.reference,9,4)as decimal(4,0)))   r where substring(r.reference,0,9)=:referenceRoot]

直接在sql server上执行时,查询是可以的。

我看到我的hql中没有语法错误...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Hibernate在JPQL查询中不支持这种转换as decimal(4,0)。这里有四个选项作为解决方法:

  1. 将数据加载到Java,然后获得最高值;
  2. 使用Java类转换所需的值,然后在JPQL查询中调用它的构造函数;
  3. 使用本机SQL;
  4. 创建一个转换所需值的SQL函数,并在查询的MAX中调用此函数。
  5. 我还建议你看一下这个问题this question。祝你好运!