MAX столбца varchar с использованием HQL - PullRequest
4 голосов
/ 18 октября 2011

Я пытаюсь найти максимальное значение столбца varchar в БД mySQL, используя язык запросов hibernate.

Это запрос, который я пытаюсь выполнить, и он отлично работает в нативном SQL:

select max(cast(rs.marks as unsigned)) from Results rs;

где столбец: метки - это varchar .

Предположим, если метки столбцов (где все значения сохранены в виде текстов) имеют следующие строки:

65
75
82
41

Тогда запрос должен вернуть мне уникальный результат «82». Но когда я написал то же самое на HQL, это не сработало. Может кто-нибудь помочь мне, рассказав, как написать это в Hibernate?

Консоль говорит:

java.lang.IllegalStateException: No data type for node:org.hibernate.hql.ast.tree.AggregateNode
[AGGREGATE] AggregateNode: 'max'
[METHOD_CALL] MethodNode: '('
[METHOD_NAME] IdentNode: 'cast' {originalText=cast}
[EXPR_LIST] SqlNode: 'exprList'
[DOT] DotNode: 'results0_.marks_'
{propertyName=marks,dereferenceType=4,propertyPath=marks,path={synthetic-alias}.marks,tableAlias=results0_,className=com.Results,classAlias=rs}
[IDENT] IdentNode: '{synthetic-alias}' {originalText={synthetic-alias}}
[IDENT] IdentNode: 'marks' {originalText=marks}
[IDENT] IdentNode: 'unsigned' {originalText=unsigned}

1 Ответ

1 голос
/ 08 июня 2013

Наткнулся на этот вопрос и решил ответить, хотя он очень старый.

Прежде всего этого будет достаточно для получения значения MAX

SELECT MAX(marks) max_value FROM Results;

Во-вторых в HSQL нет ключевого слова UNSIGNED. Поэтому, если значение результата необходимо преобразовать в INT

SELECT CAST(MAX(marks) AS INT) max_value FROM Results;
...