Java-Hibernate-Newbie:如何访问此列表中的值?

时间:2010-04-13 21:59:58

标签: java hibernate orm

我有这个类映射

@Entity
@Table(name = "USERS")
public class User {
 private long id;
 private String userName;
}

我提出了一个问题:

Query query = session.createQuery("select id, userName, count(userName) from User order by count(userName) desc");
            return query.list();

如何访问查询返回的值?

我的意思是,我应该如何对待query.list()?作为用户还是什么?

2 个答案:

答案 0 :(得分:3)

要严格回答您的问题,在select子句中指定类属性的查询(以及可选地调用聚合函数)将返回“标量”结果,即Object[](或List<Object[]>)。见10.4.1.3. Scalar results

但您当前的查询不起作用。你需要这样的东西:

select u.userName, count(u.userName) 
from User2633514 u 
group by u.userName 
order by count(u.userName) desc

答案 1 :(得分:1)

我不确定Hibernate如何处理聚合和计数,但我不确定你的查询是否会起作用。您正在尝试选择聚合(即“count(userName)”),但您没有userName的“group by”子句。

如果查询确实有效,并且Hibernate可以弄清楚如何处理它,你得到的结果很可能是原始的Object [],因为Hibernate将无法映射你的“count(userName) )“将数据放入映射对象的任何字段中。

总的来说,当你在查询中使用聚合时,Hibernate会变得有点棘手,因为你不再将表/列直接映射到类/字段中。从他们的文档中了解有关如何在Hibernate中进行聚合的更多信息可能是一个好主意。