NamedJDBCTemplate Parameters - список списков - PullRequest
0 голосов
/ 09 мая 2018

У меня есть запрос, который выглядит примерно так:

SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))

И он будет выбирать любые записи, где t.a == 1 AND t.b == 2 или t.a == 3 AND t.b == 4.

Кажется, это работает просто отлично.

Однако я не могу придумать, как правильно указать параметр для NamedJDBCTemplate. Я попытался дать ему список списков (то есть, List<List<int>>), но, похоже, он взорвался.

val query = "SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES :values)"

namedJdbcTemplate.queryForList(query, mapOf("values" to listOf(listOf(1, 2), listOf(3, 4))))

Я также пытался вручную преобразовать значение в строку, но это тоже не радует.

namedJdbcTemplate.queryForList(query, mapOf("values" to "(1, 2), (3, 4)"))

(На самом деле я работаю в Котлине, но это не должно влиять на этот вопрос)

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете передать свои значения в виде набора объектных массивов:

namedJdbcTemplate.queryForList(query, ImmutableMap.of(Lists.newArrayList(new Object[] {1,2}, new Object[]{3,4})));

Мы используем Google Guava для создания экземпляров коллекций, поэтому я и использовал ImmutableMap и Lists, но, очевидно, вы можетепродолжай создавать их как хочешь.

...