Spring integration Spring集成JDBC轮询器。使用复合主键更新

Spring integration Spring集成JDBC轮询器。使用复合主键更新,spring-integration,Spring Integration,我正在使用JDBC轮询器处理一些db记录,当工作流完成时,我需要更新这些记录。我找不到一种方法使if对具有复合键的表起作用 这是我的例子。表事件。具有主键(日期时间、事件位置、事件类型)。我无法更改模式 行映射到具有属性名称的POJO中:dateTime、location、type 但是当轮询器试图更新这些记录时,我从服务器得到一个语法错误响应 读取文档后,轮询器似乎使用´(:id)´来更新行,但它假定为单列PK。我找不到有关在主键中更新具有多列的行的任何信息 有没有办法用多列主键更新行?还

我正在使用JDBC轮询器处理一些db记录,当工作流完成时,我需要更新这些记录。我找不到一种方法使if对具有复合键的表起作用

这是我的例子。表事件。具有主键(日期时间、事件位置、事件类型)。我无法更改模式

行映射到具有属性名称的POJO中:dateTime、location、type


但是当轮询器试图更新这些记录时,我从服务器得到一个语法错误响应

读取文档后,轮询器似乎使用´(:id)´来更新行,但它假定为单列PK。我找不到有关在主键中更新具有多列的行的任何信息


有没有办法用多列主键更新行?还是应该使用出站jdbc或编写自己的更新解决方案?

显示完整的堆栈跟踪;事件对象和行映射器;我刚把其中一个测试从

    JdbcPollingChannelAdapter adapter = new JdbcPollingChannelAdapter(embeddedDatabase,
            "select * from item where id not in (select id from copy)");
    adapter.setUpdateSql("insert into copy values(:id,10)");

而且效果很好

只要列显示为select查询结果的属性,它就会工作。(结果是由行映射器创建的对象)

i、 e.
日期时间
位置
类型
必须是
事件
的属性


另外,根据您的
更新查询
,您应该将
每行更新
设置为true,因为它只更新一行。

每行更新
成功了!!我专注于化合物PK,而没有注意到这一点。如果我将其设置为
true
,它会工作。谢谢
    JdbcPollingChannelAdapter adapter = new JdbcPollingChannelAdapter(embeddedDatabase,
            "select * from item where id not in (select foo from copy)");
    adapter.setUpdateSql("insert into copy values(:foo,:status)");