gpt4 book ai didi

java - 如何在 JPQL 中使用别名

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:31 26 4
gpt4 key购买 nike

我正在尝试从 H2 数据库表中获取一些值。执行我需要的查询是这样的:

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;无法转换为 ...entity.Payment。

我还尝试使用一个名为 GraphDto 的不同对象,它具有属性 daydate、value1 和 value2

@Query("SELECT cast(creationDate as date) as daydate , SUM(paymentValue) as value1, fxRate as value2 FROM payment " + 
"group by cast(creationDate as date)")
List<GraphDto> findPaymentValuePerDay ();

但我得到了同样的错误。

 [Ljava.lang.Object; cannot be cast to ...entity.GraphDto.

那么,我如何在 JPQL 中使用别名??我只需要一个函数,该函数返回 3 个不同列的名称,其中的值使用正确的 H2 查询从现有实体中获取。谢谢大家

最佳答案

您的查询返回一个 Object[] 数组而不是 GraphDto 对象,您有多种方法来解决这个问题:

方案一

创建一个包含daydatevalue1value2 的构造函数

@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 ();

然后在您的服务中循环遍历此对象并提取值:

List<Object[]> listObject = rep.findPaymentValuePerDay();
for(Object[] obj : listObject){
Date date = (Date) obj[0];
Long value1 = (Long) obj[1];
Long value2 = (Long) obj[2];
}

关于java - 如何在 JPQL 中使用别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50677700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com