当前位置: 首页 > 面试题库 >

SpringData:查询批注中是否可以有子查询?

彭宏深
2023-03-14
问题内容

我想知道是否可以在@Query批注中包含子查询(org.springframework.data.jpa.repository.Query;)

我在第一个子查询括号上得到QuerySyntaxException。

这是我的查询

@Query(value="select c1 from ComplaintModel c1, "
+ "(select c2.id, min(cb.termDate) minDate from ComplaintModel c2 "
+ "join c2.complaintBullets cb join cb.status s where s.code = ?1 "
+ "group by c2.id) tmp where c1.id = tmp.id order by tmp.minDate")

谢谢!


问题答案:

不可以,JPQL查询的select子句中不能包含子查询。

JPQL在WHERE和HAVING子句中支持子查询。它可以(至少)是ANY,SOME,ALL,IN,EXIST表达式的一部分,并且当然可以用于常规条件表达式:

SELECT a
FROM A a
WHERE a.val = (SELECT b.someval 
               FROM B b 
               WHERE b.someotherval=3)


 类似资料:
  • 问题内容: 有什么办法可以让子查询在oracle db中返回多个列?(我知道此特定的sql会导致错误,但总的来说我想要的很好) 我想要这样的结果: 我知道可以通过联接解决此问题,但这不是我要的。 我的问题很简单,是否有办法从子查询中获取两个或多个值?也许一些解决方法使用双重?这样就没有实际的联接,但是每行都有一个新的子查询? 编辑:这是一个原则性问题。我知道,您可以使用join解决所有这些问题。您

  • 我正在使用一个相当大的数据集(大约500Mio-Triples)存储在图形数据库免费并在我的本地开发人员机器上运行。 我想用RDF4J对数据集执行一些操作,并且必须或多或少地选择整个数据集。要进行测试,我只需选择所需的元组。代码在第一个一百万元组中运行良好,之后由于graphDB继续分配更多的RAM,速度变得非常慢。 是否有可能对非常大的数据集执行选择查询并批量获取它们? 基本上,我只想通过一些选

  • 问题内容: 有没有一种方法可以给Oracle 11g中的子查询一个别名,例如: 否则,有一种方法可以基于client_ref_id加入两个子查询。我意识到有一个自我连接,但是在我正在自我连接上运行的数据库上可能要花5分钟才能完成(我正在运行的实际查询中有一些额外的逻辑,但是我确定了自我连接是什么引起问题)。各个子查询仅需花费几秒钟即可完成。自联接查询看起来像: 问题答案: 您可以使用Oracle的

  • 问题内容: 我在尝试执行查询时遇到了一些问题。我有两个表,一个表包含元素信息,另一个表包含与第一个表的元素相关的记录。想法是在同一行中获取元素信息以及多个记录信息。 结构可以这样解释: 这是我想要实现的: 以下查询可获得正确的结果,但对我而言似乎效率极低,必须为每个列迭代table2。无论如何,可以进行子查询并重用它吗? 问题答案: 您可以将聚合取出到CTE(公用表表达式)中: 当然,这实际上是什

  • 问题内容: 一位新同事刚刚建议在Hibernate中使用带有注释(即@NamedQuery)的命名HQL查询,而不是将HQL嵌入到我们的XxxxRepository类中。 我想知道的是,使用注释是否可以提供集中查询以外的任何优势? 特别是,是否有一些性能提升,例如因为查询仅在加载类时解析一次,而不是每次执行Repository方法时解析一次? 问题答案: 来自Pro EJB 3(Mike Keit

  • 问题内容: 是否有任何原因为什么或为什么不应该在子查询中执行“排序依据”? 问题答案: 是:不应这样做,因为从概念上讲这没有意义。 子查询将在某些外部查询中使用(否则它将毫无意义),并且该外部查询无论如何都必须进行排序,因此对子查询进行排序没有任何意义。 这是因为除非使用显式ORDER,否则SQL中的查询结果将没有特定的顺序。因此,即使您在子查询中使用了ORDER,也无法保证这会影响外部查询的结果