使用HQL的varchar列的MAX

时间:2011-10-17 20:25:28

标签: sql casting hql max varchar

我试图使用hibernate查询语言在mySQL数据库中找到varchar列的最大值。

这是我想要做的查询,这在本机SQL中工作正常:

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

其中column:marks是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 个答案:

答案 0 :(得分:1)

遇到这个问题并决定回答虽然它已经很老了。

首先这足以获得MAX值

SELECT MAX(marks) max_value FROM Results;

其次 HSQL中没有UNSIGNED个关键字。因此,如果需要将结果值转换为INT

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