【问题标题】:Unable to do subqueries in JPA无法在 JPA 中进行子查询
【发布时间】:2017-01-17 15:09:52
【问题描述】:
String query = "select t from myTable t where t.idOne = " + myId
+ " AND t.idTwo = " + myIdTwo
+ " AND t.idThree = " + myIdThree
+  "AND t.idFour = (select max(t.idFour) from t)";

所以 myTable 有一个列,我需要从中获取 MAX id 并在查询中使用它。

最后一行给了我一个错误:

运行查询时出错:创建查询时发生异常 在 EntityManager 中查询:
java.lang.IllegalArgumentException:一个 在 EntityManager 中创建查询时发生异常:异常 说明:语法错误解析 [从上面查询]。 [214, 214] 一个 必须为范围变量提供标识变量 声明。

【问题讨论】:

  • 这是 JPQL 还是 SQL?因为myTable实际上应该是JPQL中的MyEntity(实体类的名称)。
  • 对不起它的jpql,你说得对,它是实体类的名称,我只是这样命名的
  • 这不是您在问题中所问的,但(使用正确的 ORDER BY 子句)会给您想要的结果:stackoverflow.com/questions/6708085/…
  • 也许你可以试试AND t.idFour = (select MAX(t.idFour))

标签: java oracle hibernate jpa


【解决方案1】:

看起来就像你犯了错误一样。 您的架构中有表 t 吗?如果不是,您应该指定表名而不是别名。

String query = "select t from myTable t where t.idOne = " + myId
+ " AND t.idTwo = " + myIdTwo
+ " AND t.idThree = " + myIdThree
+  "AND t.idFour = (select max(st.idFour) from myTable st)";

【讨论】:

  • 感谢这样做。我试图从同一张表中进行选择,但我想我无论如何都必须更改别名。
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2014-09-19
  • 2017-09-18
相关资源
最近更新 更多