[请教]hibernate的一个问题,关于聚合函数

smalldeer 2005-04-29 02:06:45
[请教]hibernate的一个问题,关于聚合函数

我想对一张很简单的表的某一列进行count()操作

---------------------
List list = session.find( "select count(*) from Person" );
System.out.println("size<<<"list.size());

这样返回的是list的长度是1
hibernate输出的sql语句也是select count(*) from Person
是对的
---------------------
List list = session.find( "select count(id) from Person" );
System.out.println("size<<<"list.size());

这样返回的是list的长度是就不是我想要的了,表记录有多少,就返回多少,list中放的是一个一个Person对象了
我也看了一下hibernate输出的sql语句,根本就不执行select count(id) from Person这样的话,而是执行其它的了

----------
同样的问题也处在max()上,用createQuery也试过了,得到原来的结果

想问一下是为什么,能有解决的方法吗?请各位执教,谢谢了



...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lippea 2005-04-30
  • 打赏
  • 举报
回复
这段代码是我执行后贴出来的。
msn:lippea@sohu.com
smalldeer 2005-04-29
  • 打赏
  • 举报
回复
你好,首先谢谢你的回复

然,不知道你调试过你给的答案吗?还是想当然的回答

反正我这样也是调式过的,是不行的
lippea 2005-04-29
  • 打赏
  • 举报
回复
Query q = session.createQuery("select max(customer.id) from Customer customer ");
List results = q.list();
Integer id = (Integer)results.get(0);
smalldeer 2005-04-29
  • 打赏
  • 举报
回复
谢谢,你的回答很好,十分谢谢

还有点想请教,我想取最大值

select max(id) from table是不是不能这样用了啊,
我用了这个后,它没有执行select max(id) from table,
而是把对象全部取出来了

不知道我想实现“取最大值”能有什么方法,谢谢了
Saro 2005-04-29
  • 打赏
  • 举报
回复
楼主应该把思想转过弯来:hql是"面向对象"的,你操作的不是数据表,而是java对象.
Saro 2005-04-29
  • 打赏
  • 举报
回复
这样:
List list = session.find( "select count(p.id) from Person p" );
很显然,如果使用count(id)的话,hql解析器是不会知道id是什么的.
smalldeer 2005-04-29
  • 打赏
  • 举报
回复
upup
mim 2005-04-29
  • 打赏
  • 举报
回复
public int getRows() throws HibernateException {
int totalRows = 0;
String queryString = "select count(*) from User as c";
Session session = SessionManager.currentSession();
totalRows = ((Integer) session.iterate(queryString).next()).intValue();
return totalRows;
}

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧