我想用这个SQL查询来实现JPA查询:
String hql = "SELECT DATE(date) AS Date, SUM(volume) AS amount, COUNT(*) AS number_of_transactions " +
" FROM " + PaymentTransactionsDailyFacts.class.getName() + " WHERE (date BETWEEN :start_date AND :end_date )" +
" GROUP BY DATE(date)";
我尝试这样做:
String hql = "SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e.*) AS count " +
" FROM " + PaymentTransactionsDailyFacts.class.getName() + " e WHERE (date BETWEEN :start_date AND :end_date )" +
" GROUP BY DATE(date)";
但我得到的错误:
expecting IDENT, found '*' near line 1, column 63 [SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e.*) AS count FROM .......PaymentTransactionsDailyFacts e WHERE (date BETWEEN :start_date AND :end_date ) GROUP BY DATE(date)]
什么是实现这个查询到JPA的正确方法?
JPQL不知道*
是什么意思。你会,而不是只说e
,不e.*
。
String hql = "SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e) AS count "
+ " FROM " + PaymentTransactionsDailyFacts.class.getName()
+ " e WHERE (date BETWEEN :start_date AND :end_date )"
+ " GROUP BY DATE(date)";
这是因为JPQL的Java实体进行操作。请注意,您是从一个类名,而不是表说。对象没有通配符说在类中的任何领域。相反,您可以指定对象本身不是空说,一排是存在的。
在SQL的语法e.*
基本上是(虽然也许不是直译)说,存在于该行至少一个非空列。因为它没有说有一个行存在的任何更直接的方式。但JPQL确实有一种说法,一个对象存在。这是一个基本的Java非空检查。因此,在JPQL,你这样做Java的方式(尽管是在JPQL语法),而不是SQL的方式。
也可以看看