Похоже, что IN
запросы с использованием UUID невозможны, если передать коллекцию в одно значение привязки.
Вот что происходит:
Spring Data преобразует ваш String-запрос
SELECT * FROM entity WHERE id IN (:id)
в нотацию Кассандры, используя аргументы позиционного запроса
SELECT * FROM entity WHERE id IN (?)
, и привязывает данный параметр к ?
.Давайте превратим это в исполняемый фрагмент кода:
session.execute(new SimpleStatement("SELECT * FROM entity WHERE id IN (?)",
Arrays.asList(UUIDs.random())));
Когда вы запустите этот отрывок, вы снова получите InvalidQueryException
.Мы все еще можем выполнить запрос IN
, но нам нужно развернуть параметры:
new SimpleStatement("SELECT * FROM entity WHERE id IN (?, ?)", UUIDs.random(), UUIDs.random())
В идеальном мире Кассандра может принять List
(или Set
) предметов, чтобы сохранитьнезависимость строки запроса от фактического количества аргументов.