2013-05-14 4 views
2

Étant donné les classes suivantes:QueryDSL - Somme où une jointure est involed

class User { 
    @OneToMany 
    Set<Transaction> transactions 
} 

class Transaction { 
    BigDecimal money; 
} 

Je suis perplexe comment effectuer un agrégat, les fonctions ne semblent pas être disponibles la requête suivante:

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

en prime - est-ce possible si le money est en tant que type Joda l'argent, plutôt que comme un BigDecimal?

(j'utilise UserType's Joda Money soutien pour faciliter la persistance)

+1

Vous voulez dire singleResult (transaction.money.sum()); ? –

+0

Ah! SingleResult - merci. S'il vous plaît poster comme une réponse, donc je peux accepter. Aussi, est-il possible d'effectuer cela, en utilisant JodaMoney au lieu de BigDecimal? –

Répondre

1

Quelque chose comme cela devrait fonctionner

QUser $user = QUser.user; 
QTransaction $transaction = QTransaction.transaction; 
query().from($user) 
    .innerJoint($user.transactions, $transaction) 
    .where($user.eq(myUser)) 
    .singleResult($transaction.money.sum()); 

Querydsl n'a pas (encore) un soutien direct pour Joda argent, en utilisant l'argent Joda la La méthode sum() ne sera pas disponible directement.

Questions connexes