Java 如何在JPQL中使用别名
我试图从H2 db表中获取一些值。 我需要的查询是:Java 如何在JPQL中使用别名,java,spring,spring-data-jpa,h2,jpql,Java,Spring,Spring Data Jpa,H2,Jpql,我试图从H2 db表中获取一些值。 我需要的查询是: SELECT cast(creationDate as date) as DATE, SUM(paymentValue) as TOTAL,fxRate FROM payment group by DATE 其中,“creationDate”、“paymentValue”、“fxRate”是表“payment”的列。 CreationDate是一个时间戳,所以我只能从中获取日期。 当我尝试用Java编写它时 @Query("SELEC
SELECT cast(creationDate as date) as DATE, SUM(paymentValue) as TOTAL,fxRate
FROM payment
group by DATE
其中,“creationDate”、“paymentValue”、“fxRate”是表“payment”的列。
CreationDate是一个时间戳,所以我只能从中获取日期。
当我尝试用Java编写它时
@Query("SELECT cast(creationDate as date) as daydate , SUM(paymentValue) as value1, fxRate as value2 FROM payment " +
"group by cast(creationDate as date)")
List<Payment> findPaymentValuePerDay ();
但我也犯了同样的错误
[Ljava.lang.Object; cannot be cast to ...entity.GraphDto.
那么,如何在JPQL中使用alias??我只需要一个函数,它返回3个不同列的名称,其中的值取自使用右H2查询的现有实体。
谢谢大家您的查询返回一个
Object[]
数组,而不是GraphDto
对象,您有多种方法来解决此问题:
解决方案1
创建一个构造函数,其中包含daydate
,value1
,value2
@Entity
public class GraphDto{
private Date daydate;
private Long value1;
private Long value2;
public GraphDto(Date daydate, Long value1, Long value2){
//...
}
//..getters and setters
}
那么您的查询应该如下所示:
SELECT NEW com.packagename.GraphDto(cast(creationDate AS date), SUM(paymentValue), fxRate)
FROM payment
GROUP BY cast(creationDate AS date)
解决方案2
将退货类型更改为:
List<Object[]> findPaymentValuePerDay ();
列出findPaymentValuePerDay();
然后在此对象上的服务循环中提取值:
List<Object[]> listObject = rep.findPaymentValuePerDay();
for(Object[] obj : listObject){
Date date = (Date) obj[0];
Long value1 = (Long) obj[1];
Long value2 = (Long) obj[2];
}
List listObject=rep.findPaymentValuePerDay();
对于(对象[]对象:listObject){
日期日期=(日期)obj[0];
Long value1=(Long)obj[1];
Long value2=(Long)obj[2];
}
当您尝试选择将转换(creationDate as date)作为daydate,将SUM(paymentValue)作为value1,将fxRate作为value2
时,您正在尝试将对象[]
转换为GraphTo
。难怪你会出错。您必须逐个元素分析对象[]
,或者在图形中创建合适的构造函数
List<Object[]> listObject = rep.findPaymentValuePerDay();
for(Object[] obj : listObject){
Date date = (Date) obj[0];
Long value1 = (Long) obj[1];
Long value2 = (Long) obj[2];
}