03 novembre 2006

IBATIS: PROBLEM MANAGING BLOBs


Avendo perso molto tempo per arrivare alla necessaria conoscenza per risolvere il problema, mi fa piacere condividere con voi le conclusioni, in modo che, in futuro, non dobbiate perdere anche voi tempo per un problema analogo.


Il problema è che, se si utilizzano i BLOB, la "conversione automatica" da byte[] a blob non funziona.
Pertanto, deve essere specificato il trattamento del BLOB sul file di configurazione di Ibatis.
In generale, si parla di CTH (custom type handler).
Ho dovuto cambiare versione dei jar di Ibatis per avere l'handler dei BLOB e dei CLOB.

Nel caso particolare, la modifica sul file di configurazione è la seguente:
<typeAlias type="com.ibatis.sqlmap.engine.type.BlobTypeHandlerCallback" alias="blobHandler" />
<resultMap id="preferences" class="com.daimlerchrysler.bdweb.entities.Preferences"> ......... <result property="exportTemplate" column="exportTemplate" typeHandler="blobHandler"/> ......... </resultMap> .............. <update id="savePreferences"> update preferenz set ......... exportTemplate = #exportTemplate,handler=blobHandler# ......... </update>

Vi è però un problema.
Utilizzando questo metodo, non mi stanno funzionando più in modo corretto gli "handler" già esistenti di default per Ibatis.
In questo caso, ad esempio, un boolean non viene trasformato automaticamente in char di 0/1.

Il problema, però, si aggira facilmente, in quanto:
1. ho si crea un CHT apposito (ci vogliono 5 minuti e si trovano esempi su internet)
2. oppure, nel mio caso, si trasforma un boolean in carattere all'interno del DAO.