JPQL查询

时间:2015-07-31 10:47:27

标签: hibernate jpa hibernate-mapping jpql

我有一个JPQL查询,它返回没有聚合的结果

public List<Transaction> getProjTransactionsByParametersId(Long id){
        StringBuilder sb = new StringBuilder("FROM Transaction AS t WHERE t.account.id = :id and status = 0");

        Query q = em.createQuery(sb.toString(), Transaction.class)
                .setParameter("id", id);

        List<Transaction> projTransactions = q.getResultList();

        return projTransactions;
    }

我如何在此处加入小组?我想要一些像:

public List<Transaction> getProjTransactionsByParametersId(Long id){
        StringBuilder sb = new StringBuilder("SELECT sum(t.amount), t.valueDate FROM Transaction AS t WHERE t.account.id = :id and status = 0 GROUP BY t.valueDate");

        Query q = em.createQuery(sb.toString(), Transaction.class)
                .setParameter("id", id);

        List<Transaction> projTransactions = q.getResultList();

        return projTransactions;
    }

在这种情况下,我是否必须在sum映射中为该Transaction聚合创建一些新字段?我从其他来源读过文学,但我无法理解逻辑。

例如对于映射中的valueDate,我有getter将其值返回到我的表中。那个聚合列怎么样?

1 个答案:

答案 0 :(得分:1)

只需给它一个别名,例如sum(t.amount) as amountSum。然后读取读取数组列表中的值(或使用其他类似的alternatives):

List<Object[]> projTransactions = q.getResultList();
for (Object[] objects : projTransactions) {
   Number amountSum = (Number) objects[0]; // Use appropriate data type
   Date valueDate = (Date) objects[1];
}

此外,从查询创建方法中删除(错误的)类参数:

Query q = em.createQuery(sb.toString())