我试图使用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}
答案 0 :(得分:1)
遇到这个问题并决定回答虽然它已经很老了。
首先这足以获得MAX值
SELECT MAX(marks) max_value FROM Results;
其次 HSQL中没有UNSIGNED
个关键字。因此,如果需要将结果值转换为INT
SELECT CAST(MAX(marks) AS INT) max_value FROM Results;