如何在@Query注解中添加复杂的内部查询

How to add complex inner query to @Query annotaion

正常 sql 查询在数据库中正常工作 sql 开发人员传递 bID 和期间的值。

SELECT * FROM A WHERE abcID IN (SELECT abcID FROM B WHERE bID=1) AND period=3

在 Repository 的项目中 class 我通过了这个

@Query("select a from A where a.abcID IN:(select b.abcId from B where bID=:RevID) and period=:period")

错误如

Space is not allowed after parameter prefix ':' [select a from A where a.abcID IN:(select b.abcId from B where bID=:RevID) and period=:period]

我想知道如何在 @Query 注释中正确插入上述查询

首先我要告诉你以下几点。

  1. 您不能将 select 查询用作 select a from A where a.abcID。这里 a 是一个列,所以不能定义像 a.abcID 这样的东西。需要 select column from tableA a where a.abcID
  2. IN 子句中的查询使用相同。它需要像 select b.abcId from tableB b where b.bID=:RevID
  3. 您用作 :RevID, :period 的内容需要作为 @Param("RevID"), @Param("period") 传递给查询方法。

这是查询模板。

@Query("select a.nameOfcolumnYouWantToRetrieve from tableA a where a.someColumn in(select b.someColumn from tableB b where b.columnValueOfTableBYouwantToMatch=:RevID) and a.period=:period")

利用这一点,尝试下面的查询。

 @Query("select a.id from A a where a.abcID in(select b.abcId from B b where b.bID =:RevID) and a.period=:period")