2014-09-17 4 views
0

У меня есть две таблицы, назовем их Лицом и интересом. Человек может иметь много интересов. То, что я пытаюсь сделать сейчас, состоит в том, чтобы создать список лиц, который упорядочен по количеству интересов, которые у них есть. Я не заинтересован в том, сколько интересов у каждого человека, я только хочу, чтобы список был заказан таким образом (я все еще хочу иметь весь объект Person из запроса)JPA Запрос с подзапросом в предложении ORDER

В простом SQL это будет запрос например:

SELECT p.*, COUNT(i.id) as cnt FROM person p, interest i WHERE p.id = i.person_id ORDER BY cnt DESC 

Но я не могу понять, как получить такой запрос в JPA. Я пробовал следующее:

Join<Person, Interest> interests = rootPerson.join("interests", JoinType.LEFT); 
criteriaQuery.orderBy(builder.desc(builder.count(interests))) 

Но это не дает правильных данных.

Я также пытался написать подзапрос, но я не уверен, как я могу использовать подзапрос в предложении ORDER by.

Любые идеи? Спасибо;)

+0

Как бы ваш SQL работал без группировки на человека? – Chris

ответ

0

SQL, который вы указали, имеет 1: 1 от интересов к человеку, поэтому я предполагаю, что ваша объектная модель будет иметь объект Person с 1: M обратно к интересам по интересам коллекции. Если да, то JPQL будет: «Выберите p из списка« Человек по порядку по размеру (p.interests) ». Размер не может быть разрешен непосредственно в предложении order by, поэтому вам может потребоваться использовать «Выбрать p, count (p.interests) как cnt из Person p order cnt», чтобы более точно соответствовать вашему SQL. Если это сработает, его можно легко перевести на критерии.

Смежные вопросы