2010-03-18 12 views
20

sto usando iBATIS per chiamare una stored procedure su MSSQL Server, i parametri di input sono immobili in un POJO che viene messo alla mappa:Stored procedure arretrato a POJO da iBATIS

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

Tutto i parametri sono impostati correttamente come input per la procedura, quindi non c'è niente di sbagliato lì. Ma uno dei parametri è un parametro di uscita e mi aspettavo che venisse reimpostato sul POJO, ma invece una mappatura aggiuntiva "obj.new"=false viene inserita nella mappa da iBATIS. Ecco una versione semplificata della mappatura che mostra l'idea di base:

<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> 

Dopo aver chiamato la procedura ho due mappature Mappa passato a iBATIS:

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

Ora vedo che iBatis documentation dice "Quando si esegue stored procedure res - iBATIS creerà oggetti per i parametri OUTPUT " quindi ha senso. Ma la mia domanda è se c'è un modo per istruire iBATIS rimettere il valore booleano al POJO dopo che la procedura è stata chiamata? Preferisco non fare il lavoro extra per far uscire il valore dalla mappa e impostarlo sul POJO.

// Uhlen

+0

Ho trovato la risposta di Jeff Butler Per rispondere a questa di Jeff Butler a questo post http://groups.google.com/group/mybatis-user/browse_thread/thread/14826bc31c9f143d ad essere molto utile quando ho affrontato un problema simile (anche se con un'istruzione select piuttosto che un aggiornamento) –

risposta

1

È possibile utilizzare una mappa parametro esplicito. Vedi Page 21 of the manual

È piuttosto prolisso ma ha funzionato per me in passato.

<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> 
Problemi correlati