Java NamedJDBCTemplate参数是列表列表

Java NamedJDBCTemplate参数是列表列表,java,jdbc,kotlin,spring-jdbc,jdbctemplate,Java,Jdbc,Kotlin,Spring Jdbc,Jdbctemplate,我有一个类似这样的查询: SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4)) 它将选择t.a==1和t.b==2或t.a==3和t.b==4的任何记录 这似乎很管用 但是,我无法找到一种干净的方法来指定NamedJDBCTemplate的参数。我试着给它一个列表列表(即,list),但它似乎在这样做时崩溃了 val query = "SELECT * FROM someTable t WHERE (t.a,

我有一个类似这样的查询:

SELECT * FROM someTable t WHERE (t.a, t.b) IN (VALUES (1, 2), (3, 4))
它将选择
t.a==1和t.b==2
t.a==3和t.b==4的任何记录

这似乎很管用

但是,我无法找到一种干净的方法来指定
NamedJDBCTemplate
的参数。我试着给它一个列表列表(即,
list
),但它似乎在这样做时崩溃了

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)"))

(我实际上在Kotlin工作,但这不应该对这个问题产生影响)

您可以将值作为对象数组的集合传入:

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

我们使用Google Guava来实例化集合,因此我使用了
ImmutableMap
列表
,但显然您可以按照自己的意愿创建它们。

发布您尝试过的代码。我添加了我尝试过的代码。您使用的是哪种RDBMS?DB2 LUW。查询本身在其中工作得很好,就是这样。谢谢看起来列表不起作用,但数组列表起作用。我使用了字符串数组,它们工作得很好。