当前位置: 首页 > 面试题库 >

如何在JPQL中使用别名

房星光
2023-03-14
问题内容

我正在尝试从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; cannot be cast to ...entity.Payment.

我还尝试使用另一个名为GraphDto的对象,该对象的属性为datedate,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[]而不是GraphDtoObject 的数组,您可以通过多种方式解决此问题:

解决方案1

创建持有一个构造函数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];
}


 类似资料:
  • 问题内容: 我的.aliases中具有以下别名: 并且我想在名称中包含字符串的所有文件中查找不区分大小写的内容: 这是我得到的: 有什么方法可以在xargs中使用别名,还是必须使用完整版本: 注意: 这是一个简单的示例。此外,我还有一些非常复杂的别名,无法轻易手动扩展。 编辑: 我用过,所以请指定答案是否特定于外壳。 问题答案: 别名是外壳特定的- 在这种情况下,很可能是bash特定的。要执行别名

  • 问题内容: 我正在尝试搜索文本和备注的多列,以查找某些我不想看到的特定短语和黑名单短语。 假设下表 前任。我想找到所有提到(在任何领域中)“苹果”但黑名单中的“苹果酱”的故事。 如何在where子句中使用别名?我找不到有关此主题的任何文档: 1)这种方法可行吗? 2)替代方法是否意味着我将在每次行迭代中执行多个字符串连接? 问题答案: 我不能在where子句中使用别名。 这种方法可行吗? 当然,将

  • 我有一个名为“cotacaoitensfranqueado”的表,我想用来命名它,我知道我可以这样做我在这个问题上看到了什么,但我想用我的模型来做。

  • null JPQL中是否存在检查UUID空值的问题?

  • 我有一个查询来确定一个值是否已经存在于数据库中。在将资源插入数据库之前,我用它来验证资源。看起来是这样的: 在数据访问上,实现如下: 它确实有效并完成工作,但是我认为query.getResultList(.isEmpty()不是我需要的正确语法,而且我希望让它更快,并在找到值后返回,而不是循环遍历数据库上的每一行。任何建议将不胜感激。

  • persistence.xml文件 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>org.hibernate.ejb.hibernatePersistence