Упорядочение по количеству отношений в Hibernate - PullRequest
0 голосов
/ 31 марта 2010

У меня есть две модели, которые имеют отношение один ко многим. Допустим, это аукцион для продукта, и у продукта может быть много предложений.

В основном я хотел бы вынуть все продукты, но упорядочить их по количеству полученных ставок.

То, что я получил до сих пор:

"select p from Product as p join p.bids b where b.product=p order by COUNT(b) ASC";

Тем не менее, это, кажется, вытаскивает только один продукт с предложениями на нем. Если я хочу сделать заказ во время запроса гибернации, я обычно могу сделать что-то вроде

"select p from Product as p ORDER BY p.name";

Я думал, что могу просто сделать что-то вроде

"select p from Product as p ORDER BY COUNT(p.bids)";

Но я не могу.

Есть ли у кого-нибудь совет или опыт с такой проблемой?

Спасибо, -gearoid

1 Ответ

0 голосов
/ 31 марта 2010

Вы можете добавить свойство в свой продукт под названием numberOfBids, а затем отобразить его так:

<property name="numberOfBids">
   <formula>
      (SELECT (count(bids.id) WHERE bids.product_id = product_id)))
   </formula>
</property>

Теперь единственная проблема с этим методом - запрос в тегах формул ДОЛЖЕН быть в прямом SQL. Так что это зависит от базы данных. В этом запросе bids - это номер таблицы ставок в базе данных, а product_id - это имя поля в продуктах, которое содержит идентификатор продукта. Кроме того, вы также должны добавить свойство типа long в ваш объект данных Product.

Как только вы это сделали, теперь вы можете выполнить свой запрос

select p from Product as p ORDER BY COUNT(p.numberOfBids)

Должен работать как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...