Я знаю, что ваш вопрос более специфичен для функции Spring Data Ignite.Однако, в качестве альтернативы, вы можете достичь этого, используя SqlQuery-абстракцию Ignite.
Вы сформируете свой запрос следующим образом.Я вставил приведенный ниже пример с пользовательской функцией sql inSet , которую вы напишите.Кроме того, ниже рассказывается, как это используется в вашем sql.
IgniteCache<String, MyRecord> cache = this.ignite
.cache(this.environment.getProperty(Cache.CACHE_NAME));
String sql = "from “my-ignite-cache”.MyRecord WHERE
MyRecord.city=? AND inSet(?, MyRecord.flight)"
SqlQuery<String, MyRecord> sqlQuery = new SqlQuery<>(MyRecord.class,
sql);
sqlQuery.setArgs(MyCity, [Flight1, Flight2 ] );
QueryCursor<Entry<String, MyRecord>> resultCursor = cache.query(sqlQuery);
. Вы можете перебрать курсор результата, чтобы сделать что-то значимое из извлеченных данных.
resultCursor.forEach(e -> {
MyRecord record = e.getValue();
// do something with result
});
Ниже приведена функция Ignite Custom Sql , которая используется в приведенном выше запросе - это поможет реплицировать функцию предложения IN.
@QuerySqlFunction
public static boolean inSet(List<String> filterParamArgIds, String id) {
return filterParamArgIds.contains(id);
}
Инаконец, в качестве ссылки MyRecord
, упомянутой выше, можно определить что-то вроде этого.
public class MyRecord implements Serializable {
@QuerySqlField(name = "city", index = true)
private String city;
@QuerySqlField(name = "flight", index = true)
private String flight;
}