Функции даты в hibernate 5 HQL

Так что я как бы новичок в спячке, поэтому просто терпи меня здесь. У меня есть такой запрос mysql:

SELECT SUM(PLAN_ID), USER_ID 
FROM   TABLE_A 
WHERE  ACTIVATION_DATE 
         BETWEEN DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
             AND LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 
AND    USER_ID in ('123','124') GROUP BY '123';

Я пытаюсь запустить то же самое, используя запрос JPQL hibernate 5. Вот что я пробовал:

Map<Integer, List<Object>> result = null;
Query query = null;
Session session = null;
session = SessionFactoryUtil.getSessionFactory().openSession();
result = new HashMap<Integer, List<Object>>();
query = session.createQuery(aggregationQuery);
int rowNo = 0;
for (Iterator it = query.iterate(); it.hasNext();) {
rowNo ++;
result.put(rowNo, (List<Object>) it.next());
}

Все же бросает Unexpected token errors. Не мог бы кто-нибудь объяснить, что я здесь делаю не так? Огромное спасибо.

1 ответ

Решение

Вы не можете использовать их как есть, потому что JPQL их не знает.

У вас есть два варианта:

1) используйте SQL

session.createNativeQuery(aggregationQuery);

2) используйте функцию JPQL

function('DATE_ADD', function('LAST_DAY', function('DATE_SUB', current_date, function('INTERVAL', 2, 'MONTH')), function('INTERVAL' 1, DAY) 

Вариант 2 - это не рабочий код, это просто пример, чтобы показать вам, к чему это может привести. Вероятно, вы используете лучший вариант 1 с собственным запросом.

Другие вопросы по тегам