实现JPA查询与COUNT和SUM

问题描述 投票:0回答:1

我想用这个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的正确方法?

java jpa jpa-2.0 jpa-2.1
1个回答
1
投票

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的方式。

也可以看看

© www.soinside.com 2019 - 2024. All rights reserved.