0

我的xml中有类似下面的配置。我必须将两个参数传递到我的选择查询中。

< int-jdbc:outbound-gateway data-source="datasource"
                            update="UPDATE DUMMY SET DUMMY_VALUE='test'"
                            request-channel="findPersonRequestChannel" 
                            query="select * from Person where lower(name)=:payload[name] and id =:payload[id]"
                            reply-channel="findPersonReplyChannel"                                
                            row-mapper="personResultMapper"
                            max-rows-per-poll="100" >
< /int-jdbc:outbound-gateway >

在使用上述方式时,会出现以下异常:-

Caused by: org.springframework.integration.MessagingException: At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract java.util.List org.springframework.integration.samples.jdbc.service.PersonService.findPersonByName(java.lang.String,java.lang.String)]

任何想法,如何解决这个错误?

使用一个参数,它工作正常。

4

2 回答 2

1

您需要显示您的<gateway/>配置和service-interface. 这个问题是在jdbc网关的上游。

看起来您正在尝试添加两个值作为有效负载(一条消息只能有一个有效负载),而您的 JDBC 选择在单个有效负载上使用两个属性。

您的单个有效负载需要是 JavaBean 或 Map、数组等。

于 2013-06-19T12:53:19.490 回答
0
<int-jdbc:outbound-gateway data-source="datasource"     
                           request-channel="findPersonRequestChannel" 
                           query="select * from Person where name=:name and id=:id"
                           reply-sql-parameter-source-factory="requestSource1"
                           reply-channel="findPersonReplyChannel"                                
                           row-mapper="personResultMapper"
                           max-rows-per-poll="100">
</int-jdbc:outbound-gateway>


<bean id="requestSource1" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>
            <entry key="name" value="payload.name"/>
            <entry key="id" value="payload.personId"/>
        </map>
    </property>
</bean>

我有一个接受 Person obj 的服务接口。在调用搜索方法之前设置 name 和 id。

告诉我,如果有人想了解更多。

于 2013-06-20T06:55:07.433 回答