我无法在使用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]
答案 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