Порядок хранения спящего режима

У меня есть таблица под названием "Подарок", которая имеет отношение "один ко многим" к таблице с именем 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, хотя кажется менее эффективным вернуть столько данных из БД.