2011-08-29 2 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

p.category 별 그룹이 작동하지 않습니다. https://hibernate.onjira.com/browse/HHH-1615를 참조하십시오. 그리고 나는 당신이 일할 주문의 선택에 카운트를 필요로한다고 생각합니다. –

+0

@JB Nizet : 첫 번째 부분은 Hibernate 버그입니다. * JPA spec에 따라 작동해야합니다. 두 번째 부분은 결과 유형 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)을 호출하십시오.

관련 문제