2010-03-18 12 views
20

estoy usando iBATIS para llamar a un procedimiento almacenado en el servidor de MSSQL, los parámetros de entrada son propiedades de un POJO que se pone al mapa:parámetro de salida del procedimiento almacenado vuelve a establecer en POJO por iBATIS

Map<String, Object> saveMap = new HashMap<String, Object>(); 
saveMap.put("obj", myArticle); 
update("save", saveMap); 

Todos los parámetros se configuran correctamente como entrada al procedimiento, de modo que no hay nada mal allí. Pero uno de los parámetros es un parámetro de salida y esperaba que se volviera a establecer en el POJO, pero en lugar de eso, iBATIS puso el mapa en "obj.new"=false. Aquí hay una versión simplificada de la cartografía que muestra la idea básica:

<procedure id="save"> 
    {<include refid="Core.returned_value" /> 
    CALL SPRC_ARTICLE_NAME_SAVE (
     <include refid = "Core.common_fields" /> 
     @pArticle_id = #obj.art_id# 
    , @pArtname = #obj.artname# 
    , @pNewArticleName_flg = #obj.new,mode=INOUT# 
    )} 
</procedure> 

Después de llamar al procedimiento Tengo dos asignaciones en el Mapa pasado a iBATIS:

  • "obj"=POJO
  • "obj.new"=False

Ahora veo que iBatis documentation dice "Al ejecutar procedimientos almacenados res - iBATIS creará objetos para los parámetros OUTPUT " por lo que tiene sentido. Pero mi pregunta es si hay una forma de indicarle a iBATIS que devuelva el valor booleano al POJO después de que se llame al procedimiento. Prefiero no hacer el trabajo extra de sacar el valor del mapa y configurarlo para mi POJO.

// Uhlen

+0

me encontré con la respuesta de Jeff Butler a esta respuesta de Jeff Butler a este post http://groups.google.com/group/mybatis-user/browse_thread/thread/14826bc31c9f143d a ser muy útil cuando me enfrentaba a un problema similar (aunque con una declaración seleccionada en lugar de una actualización) –

Respuesta

1

Puede utilizar un mapa de parámetros explícita. Ver Page 21 of the manual

Es bastante prolijo pero me funcionó en el pasado.

<parameterMap id="swapParameters" class="map" > 
    <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> 
    <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> 
</parameterMap> 

<procedure id="swapEmailAddresses" parameterMap="swapParameters" > 
    {call swap_email_address (?, ?)} 
</procedure> 
Cuestiones relacionadas