日期:2014-05-18  浏览次数:20724 次

这个sql查询语句,转为HQL语句,怎么写?
select * from t where adddate= (select max(adddate) from t);

语句为oracle的,上面语句正常执行,功能即找出添加时间最大的那条记录
框架为ssh,现我要改为Hql语句,我是这样写的:
 from t where adddate= (select max(adddate) from t);
但无效,当然,我可以单独的求出adddate最大值,然后再
from t where adddate= 最大值
来写,如果我想一步到位,不想分开写,怎么写?请大侠指教

------解决方案--------------------
转成HQL你的这个t必须是hibernate已经映射好的实体类名里面的adddate要换成对应的属性名
------解决方案--------------------
引用:
Quote: 引用:

转成HQL你的这个t必须是hibernate已经映射好的实体类名里面的adddate要换成对应的属性名

当然t表已做了实例映射,不然,from t;也肯定出错。

做好映射了那么t要换成映射的实体类名,adddate要换成对应的属性名
------解决方案--------------------
1 hibernate能搞定嵌套查询
2 既然用了hibernate,就按照它的思路走
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

转成HQL你的这个t必须是hibernate已经映射好的实体类名里面的adddate要换成对应的属性名

当然t表已做了实例映射,不然,from t;也肯定出错。

做好映射了那么t要换成映射的实体类名,adddate要换成对应的属性名

都换了,只是会报错,貌似报什么max不存在什么的。
我实例类名与表名相同,实例属性与表字段命名也一样。
Exception in thread "main" java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'max'
    \-[IDENT] IdentNode: 'adddate' {originalText=adddate}

找不到max这个方法的话,说明hibernate配置的方言类没有注册这个max,楼主指定的是oracle的哪个方言,你自己可以写个方言类继承它,在构造方法里registerFunction( "max", new StandardSQLFunction("max") );注册下这个max方法就是了
------解决方案--------------------
但是我记得max方法hibernate的方言本身就注册了啊,楼主确定你的实体类名加 t ?还有小写的类名?