【问题标题】:QueryDSL - Sum where a join is involedQueryDSL - 涉及关节的总和
【发布时间】:2013-05-14 11:13:16
【问题描述】:

给定以下类:

class User {
    @OneToMany
    Set<Transaction> transactions
}

class Transaction {
     BigDecimal money;
}

我不知道如何执行聚合,因为这些函数似乎在以下查询中不可用:

QUser $user = QUser.user;
QTransaction $transaction = QTransaction.transaction;
query().from($user)
    .innerJoint($user.transactions, $transaction)
    .where($user.eq(myUser))
    // Now what?

作为奖励 - 如果 money 被持久化为 Joda Money 类型,而不是 BigDecimal,这可能吗?

(我正在使用UserType's Joda Money 支持来促进持久性)

【问题讨论】:

  • 你的意思是 singleResult(transaction.money.sum()); ?
  • 啊! SingleResult——谢谢。请张贴作为答案,以便我可以接受。另外,是否可以使用 JodaMoney 而不是 BigDecimal 来执行此操作?

标签: java querydsl


【解决方案1】:

这样的东西应该可以工作

QUser $user = QUser.user;
QTransaction $transaction = QTransaction.transaction;
query().from($user)
    .innerJoin($user.transactions, $transaction) //inner join clause
    .where($user.eq(myUser))
    .singleResult($transaction.money.sum());

Querydsl 没有(还)直接支持 Joda Money,因此使用 Joda Money 的 sum() 方法将无法直接使用。

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2011-02-15
    • 2012-06-22
    • 2020-11-25
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多