Получение java.lang.Исключение IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный токен после выполнения запроса

#java #mysql #hibernate #spring-mvc

#java #mysql #переход в спящий режим #spring-mvc

Вопрос:

У меня есть этот старый код, который использует режим гибернации для связи с базой данных 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 .

Что означает эта ошибка? Я мало что знаю о гибернации, извините, что спрашиваю что-то глупое. Заранее спасибо за любую помощь.

Ответ №1:

Из вашего сообщения об исключении

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

в нем говорится, что он получил токен запятой, а это не то, что он ожидает.

Быстрый поиск в функции приведения HQL предполагает, что синтаксис приведения ПРИВЕДЕН ( как

Возможно, попробуйте

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