Apache Ignite:无法使用spring boot查询Select ... in()子句

时间:2018-02-04 12:25:35

标签: ignite

我无法在使用spring-boot的apache点燃时使用IN()子句。

我尝试了两种方法,但两种方法都不起作用。

请帮我解决这个问题。 存储库:

@RepositoryConfig(cacheName = "test")
public interface TestRepo extends IgniteRepository<Test, TestKey>{


    @Query("SELECT distinct subscribers FROM test where city  in :cities")
    List<Integer> selectAll(@Param("cities") List<String> cities, Pageable pageable);

    List<Test> findByCityIn( List<String> cities);

错误:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT ""test"".""TEST""._KEY, ""test"".""TEST""._VAL FROM TEST WHERE ((TEST.CITY IN ?[*])) "; expected "("; SQL statement:
SELECT "test"."TEST"._KEY, "test"."TEST"._VAL FROM Test WHERE ((Test.city IN ?)) [42001-196]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.196.jar:1.4.196]
    at org.h2.message.DbException.getSyntaxError(DbException.java:205) ~[h2-1.4.196.jar:1.4.196]

1 个答案:

答案 0 :(得分:3)

SELECT "test"."TEST"._KEY, "test"."TEST"._VAL FROM Test WHERE ((Test.city IN ?))

首先,问号肯定应该是parens:IN (?)

其次,您尝试将多个值(在列表中)一次绑定到同一个问号。我不确定这会奏效。文档告诉它不适用于IN,但会针对下面描述的情况。

第三,出于性能原因,建议不要将IN与Ignite一起使用,建议使用join table()https://apacheignite-sql.readme.io/docs/performance-and-debugging#section-sql-performance-and-usability-considerations