2012-12-16 3 views
4

Hey, je suis nouveau à JPA et assez nouveau à SQL et je dois écrire une requête slectionJPA requête nommée

Je dois:

« Sélectionner tous les paiements dont le montant est supérieur à la moyenne la valeur de tous les paiements en dollars américains »

J'ai une entité JPA:

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
private Long id; 
private String account; 
private double amount; 
private String currency; 

J'ai essayé avec:

@NamedQuery(name="payByUSD" , query="SELECT x FROM Payment x WHERE x.amount > (SELECT AVG(x.amount)from Payment)") 

mais j'obtenu l'erreur suivante:

- The FROM clause must defined at least one identification variable declaration. 
- The right expression is missing from the arithmetic expression. 

Quelqu'un peut-il me diriger dans la bonne direction.

+0

'AVG (amount)' au lieu de 'AVG (Payment)'. –

+0

Ok, je l'ai changé en x.amount mais j'ai toujours ces erreurs: \t - La clause FROM doit avoir défini au moins une déclaration de variable d'identification. \t - L'expression correcte est manquante dans l'expression arithmétique. –

+0

Cela provient du SELECT interne; fais comme avec x. Au lieu de SQL, nous faisons des objets dans les requêtes JPA. –

Répondre

5

Utilisez

SELECT x FROM Payment x 
WHERE x.amount > (SELECT AVG(p.amount) from Payment p) 

Votre sous-requête est

SELECT AVG(x.amount) from Payment 

et x n'est pas défini.

Questions connexes