1

私の目標は、テーブルから行を読み取り、それらをメッセージとしてチャネルに配置し、テーブルを更新することです。RowMapperを使用して、結果セットをオブジェクトのリスト(リスト)に変換しています。

これが私の質問です: UPDATEクエリパラメータは何である必要がありますか:STATUS_TABLE_ID IN(:payload [Status.id])、ペイロードはリストであり、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;
}

誰かが私を正しい方向に向けることができれば素晴らしいと思います。

4

1 に答える 1

1

Statusメソッドがあると仮定するとgetId()、単純にを使用します:id

更新クエリは、クエリによって返されるオブジェクトのコレクションに対する射影を使用します。

expression = "#root.![" + expression + "]";

これについては、2番目のhttp://static.springsource.org/spring-integration/reference/html/jdbc.html#jdbc-inbound-channel-adapterNoteで説明されています。

コレクションの投影については、http: //static.springsource.org/spring-framework/docs/3.2.1.RELEASE/spring-framework-reference/html/expressions.html#expressions-collection-projectionで説明しています。

于 2013-03-06T16:26:11.860 に答える