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