我的目标是从表中读取行并将它们作为消息放在通道上并更新表。 我使用RowMapper将结果集转换为对象列表(List)。
以下是我的问题: UPDATE Query参数应该是什么: STATUS_TABLE_ID IN(:payload [Status.id]),因为Payload是List和to查询Status.Id是正确的语法。
我的配置:
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
我的RowMapper类:
public class StatusMapper implements RowMapper<Status>{
@Override
public Status mapRow(ResultSet rs, int rowNum)throws SQLException {
Status status = new Status();
status.setMessageContent(rs.getString("MESSAGE_CONTENT"));
status.setId(rs.getLong("STATUS_ID"));
return status;
}
如果有人能指出我正确的方向,那就太好了。
答案 0 :(得分:1)
假设Status
有方法getId()
,您只需使用:id
。
更新查询使用对查询返回的对象集合的投影...
expression = "#root.![" + expression + "]";