2010-04-13 18 views
3

我有這個類映射Java-Hibernate-Newbie:如何訪問此列表中的值?

@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()?作爲用戶還是什麼?

回答

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

我不知道Hibernate如何處理聚合和計數,但我不確定你的查詢是否可以工作。您正嘗試選擇一個聚合(即「count(userName)」),但是您沒有userName的「group by」子句。

如果查詢確實起作用,並且Hibernate可以弄清楚如何處理它,那麼返回的結果很可能是一個原始的Object [],因爲Hibernate將無法將您的「count( userName)「數據映射到映射對象上的任何字段。總的來說,當你在查詢中使用聚合時,Hibernate可能會變得更加棘手,因爲你不再將表/列直接映射到類/字段中。從他們的文檔中,更多地瞭解如何在Hibernate中進行聚合可能是一個好主意。