Использование функции четверти в сочетании с Hibernate - PullRequest
0 голосов
/ 16 мая 2018

У меня есть запрос, подобный следующему,

SELECT 
    SUM(field1 * field2) AS summation,
    MONTH(date_field) AS months
FROM
    some_table
    where QUARTER(date_field) = QUARTER(CURDATE())
GROUP BY MONTH(date_field)

Я хочу написать выше в hibernate, однако я не могу понять, как написать функциональность четверти в сочетании с hibernate. До сих пор у меня есть следующие критерии гибернации без четверти функциональности следующим образом:

ProjectionList proj = Projections.projectionList();

proj.add(Projections.sqlProjection("sum(field1 * field2) AS summation", new String[] { "summation" }, new Type[] {StandardBasicTypes.BIG_INTEGER }));

proj.add(Projections.sqlGroupProjection("month(date_field)  as months",  new String[] { "months" }, new Type[] { StandardBasicTypes.INTEGER }));

Criteria cr = getSession().createCriteria(some_table.class).setProjection(proj).add(conjunction);

Я застрял в том, как написать соединение. Спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

По сути, запрос говорит, что поле date_field принадлежит текущему кварталу, поэтому я нашел обходной путь, такой как

conjunction.add(Restrictions.between("date_field",getFirstDayOfCurrentQuarter(),getLastDayOfCurrentQuarter() ));

, где две функции getFirstDayOfCurrentQuarter () и getLastDayOfCurrentQuarter () дают первоеи последняя дата текущего квартала.Эти функции следующие:

private static Date getFirstDayOfCurrentQuarter() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    private static Date getLastDayOfCurrentQuarter() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3 + 2);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...