0

所以我对休眠有点陌生,因此请在这里忍受我。我有一个这样的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';

我正在尝试使用 hibernate 5 JPQL 查询来运行相同的操作。这是我尝试过的:

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。有人介意解释我在这里做错了什么吗?谢谢一堆。

4

1 回答 1

0

您不能按原样使用它们,因为 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。

于 2019-12-27T13:03:48.357 回答