0

如果我运行下面的查询,我会得到一个我无法转换为 Long 的对象列表

String queryString = "select sum(cat.varaible1), sum(cat.varaible2) from Enrollment as cat where cat.created >= :startDate and cat.created <= :endDate";

如果我删除 sum(cat.varaible2) 那么我会得到一个包含 long 值的列表。

String queryString = "select sum(cat.varaible1) from Cat as cat where cat.created >= :startDate and cat.created <= :endDate";

为什么会这样?请解释

4

1 回答 1

0

基本上,这就是 JPA 处理投影查询的方式。

当您的SELECT语句中有一个表达式时,结果列表将被正确键入。你既可以施放它,也可以TypedQuery从一开始就使用权利。

如果您的语句中有多个表达式SELECT,则结果将是一个Collection数组 Object。在您的情况下,每个数组都有两个元素,它们都是 type Long

如果要检索正确的结果类型,可以定义一个专用类来组合您的结果并使用构造函数表达式:

select new com.example.SumSum(sum(cat.varaible1), sum(cat.varaible2)) from ...
于 2013-01-24T10:10:37.313 回答