【问题标题】:JPA Named queryJPA 命名查询
【发布时间】:2026-01-07 08:35:01
【问题描述】:

嘿,我是 JPA 的新手,对 SQL 还很陌生,我需要编写一个选择查询

我需要:

“选择金额大于所有美元付款平均值的所有付款”

我有一个 JPA 实体:

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

我试过了:

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

但我收到以下错误:

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

谁能指出我正确的方向。

【问题讨论】:

  • AVG(amount) 而不是AVG(Payment)
  • 好的,我把它改成了 x.amount 但我仍然有这些错误: - FROM 子句必须定义至少一个标识变量声明。 - 算术表达式中缺少正确的表达式。
  • 即来自内部的SELECT;和 x 一样。我们在 JPA 查询中处理对象,而不是 SQL。

标签: java sql jpa


【解决方案1】:

使用

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

您的子查询是

SELECT AVG(x.amount) from Payment

,而x 未定义。

【讨论】: