获取java.lang.illegalargumentexception:org.hibernate.hql.internal.ast.querysyntaxception:运行查询后出现意外标记

8oomwypt  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(351)

我有一个使用hibernate与mysql数据库对话的旧代码。我正在尝试向表中添加一个新条目,这样做会命中这段特定的代码。

Query query = em.createQuery(" SELECT MAX(CAST(value,integer)) FROM StaticData where type=:type");
query.setParameter("type", type);
x = query.getResultList();

但它抛出了如下异常

[http-nio-8080-exec-153] StaticDataManager  - java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , near line 1, column 23 [ SELECT MAX(CAST(value,integer)) FROM StaticData where type=:type]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)
    at com.sun.proxy.$Proxy1064.createQuery(Unknown Source)

列类型和值的类型为string。
这个错误是什么意思?我对冬眠了解不多,抱歉问了些愚蠢的问题。提前谢谢你的帮助。

lmvvr0a8

lmvvr0a81#

从您的异常消息

QuerySyntaxException: unexpected token: , near line 1, column 23

它说它收到了逗号标记,这不是它所期望的。
快速查找hqlcast函数表明cast的语法是cast(如
或许可以试试

Query query = em.createQuery(" SELECT MAX(CAST(value as integer)) FROM StaticData where type=:type");

相关问题