Как реализовать сумму запроса поля в Hibernate? - PullRequest
1 голос
/ 29 декабря 2011

Как мы можем реализовать Hibernate sqlprojection в моем запросе?

Вот мой запрос

SELECT sum(total_amount) as total,created_at from order where created_at < DATE_SUB(curdate(), INTERVAL 7 DAY) and doctor_id = 193 GROUP BY created_at

Я реализовал DATE_SUB функцию, используя sqlRestriction вот так:

String sqlWhere = "created_at > DATE_SUB(curdate(), INTERVAL "+activityGraph+" DAY) AND doctor_id = "+id +" GROUP BY created_at";
Criteria criteria = Hibernatesession.createCriteria(Order.class);
criteria.add(Restrictions.sqlRestriction(sqlWhere));

Но я не знаю, как яполучить сумму поля с помощью запроса Hibernate.

Я обнаружил, что setProjection в Hibernate используется для получения нужной суммы, но я не знаю, как ее использовать.Также здесь я хочу использовать sqlRestriction для записи условия WHERE для функции date_sub.
Поэтому я буду использовать setProjection и sqlRestriction в одном запросе.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Ты усложняешь себе жизнь.Почему бы вам просто не вычислить предел даты в Java перед выполнением запроса?

Date today = DateUtils.truncate(new Date(), Calendar.DATE);
Date limit = DateUtils.addDays(today, -7);

И поскольку запрос полностью статичен, зачем использовать Criteria API.HQL намного проще:

String hql = "SELECT sum(o.totalAmount) as total, o.createdAt from Order o"
             + " where o.createdAt < :limit"
             + " and o.doctor.id = 193"
             + " group by o.createdAt";
2 голосов
/ 29 декабря 2011
criteria.setProjection((Projections.sum("/* name of the mapping variable for total_amount*/")));
0 голосов
/ 14 ноября 2018
public int getSum() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Criteria criteria = session.createCriteria(Product.class);
    criteria.setProjection(Projections.sum("productCount"));
    List list = criteria.list();
    session.getTransaction().commit();
    return (int) list.get(0);
}

// hibernate mpping

<property name="productCount" type="int" column="PRODUCT_COUNT"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...