Порядок хранения спящего режима
У меня есть таблица под названием "Подарок", которая имеет отношение "один ко многим" к таблице с именем ClickThrough, которая указывает, сколько раз этот конкретный подарок был нажат. Мне нужно запросить все объекты Gift, заказанные с помощью ClickThrough count. Мне не нужно возвращать счет ClickThrough, так как мне ничего не нужно делать, я просто хочу использовать его для заказа.
Мне нужен запрос для возврата объектов List of Gift непосредственно, только что заказанных по числу ClickThrough. Как это сделать, используя API-интерфейс Criteria? Я могу найти много документации по подобной информации, но ничего подобного мне не нужно.
Ответы
Ответ 1
Если вы хотите вернуть список объектов или свойств в сочетании со счетом, вам понадобится группа. В критериях это делается через ProjectionList
и Projections
. например.
final ProjectionList props = Projections.projectionList();
props.add(Projections.groupProperty("giftID"));
props.add(Projections.groupProperty("giftName"));
props.add(Projections.count("giftID"), "count"); //create an alias for the count
crit.setProjection(props);
crit.add(Order.desc("count")); //use the count alias to order by
Однако, поскольку вы используете ProjectionList
, вам также нужно будет использовать AliasToBeanConstructorResultTransformer.
Ответ 2
Примечание для всех, кто приходит сюда, ищет порядок по свойству/столбцу:
При использовании упомянутых здесь подходов результаты не найдены. Исправить было использование criteria.addOrder(Order.asc(property));
. Обратите внимание, что разница заключается в использовании addOrder
, а не add
;
У меня была эта проблема несколько раз после запуска здесь для быстрой справки.
Ответ 3
У вас есть отношение "один ко многим" от "Подарок к ClickThrough", поэтому я предполагаю, что каждый клик-клик представляет собой запись с некоторым количеством времени и другой информацией, связанной с ней. В этом случае я бы добавил поле "count" в ваш файл сопоставления и привязал порядок к критерию:
criterion.add(Order.asc(count)))
Свойство отображения выглядит примерно так:
<property name="count" type="integer" formula="(select count(*) from Gift g inner join ClickThrough ct on ct.gift_id=g.id where g.id=ID)"/>
Если вы не можете или не хотите изменять файл сопоставления, вы можете использовать Collections.sort()
с Comparator
, хотя кажется менее эффективным вернуть столько данных из БД.