2

jdbc:outbound-channel-adapter によって実行される動的更新ステートメントを作成する必要があります。これは、次のように可変数の条件を持つケース式を使用して 1 つのフィールドを設定する必要があるためです。

UPDATE tableA
SET    fieldA = CASE
                   WHEN fieldB IN ('a','b') THEN 1
                   WHEN fieldB IN ('c','d') THEN 2
                   ...
                   WHEN fieldB IN (...) THEN N
                END
WHERE  fieldC = :headers[MY_FIELDC]

次のように、Spring 式でこの動的更新ステートメントを作成できます。

"'UPDATE tableA SET fieldA = ' + headers[MY_CASE_EXP] + ' WHERE fieldC = :headers[MY_FIELDC]'"

しかし、クエリ属性は Spring 式をサポートしていないようです。

jdbc:outbound-channel-adapter で使用する動的クエリを生成するにはどうすればよいですか?

4

1 に答える 1

2

ExpressionEvaluatingSqlParameterSourceFactoryクエリを動的に作成するには、次のようなを使用する必要があります。

<jdbc:outbound-channel-adapter data-source="dataSource" channel="outboundJdbcChannelOne"
    query="UPDATE tableA SET fieldA = :something WHERE fieldC = :somethingElse"
    sql-parameter-source-factory="spelSource"/>

<bean id="spelSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>
            <entry key="something" value="headers['MY_CASE_EXP']"/>
            <entry key="somethingElse" value="headers['MY_FIELDC']"/>
        </map>
    </property>
</bean>

詳細については、春のリファレンス ドキュメントのこのセクションを参照してください。

于 2013-06-09T17:16:10.163 に答える