2011-08-29 38 views
0

我有兩個對象。如何獲取最常出現的一組對象?

@Entity 
class Person extends Model { 

    ... 
    @OneToOne 
    Category category; 
} 


@Entity 
class Category extends Model { 
    ... 
} 

我需要5個最常用的類別。我怎樣才能做到這一點 ?

感謝,

編輯:解

List<Object[]> c = Category.find(
    "SELECT p.categorie, count(p.id) FROM Person p " + 
    "GROUP BY p.category ORDER BY count(p.category) DESC").fetch(2); 

回答

2

你JPQL查詢將是這樣的:

SELECT p.category, COUNT(p.category) 
FROM Person p 
GROUP BY p.category 
ORDER BY count(p.category) DESC 

而且你會做query.setMaxResults(5)也。

+0

group by p.category不起作用。請參閱https://hibernate.onjira.com/browse/HHH-1615。而且我認爲你需要在選擇順序的工作計數。 –

+0

@JB Nizet:好的,第一部分是一個Hibernate Bug,它*應該*根據JPA規範工作,第二部分當然是真實的,它會擾亂結果類型grrrr。 –

+0

真奇怪。我將這個答案與下面的答案結合起來,它的工作原理。查看我的編輯瞭解更多信息。謝謝! –

1
select category.id, count(person.id) 
from Person person 
inner join person.category category 
group by category.id 
order by count(person.id) desc 

並執行該查詢之前,調用查詢對象setMaxResults(5)