Foros del Web » Programación para mayores de 30 ;) » Java »

Ibatis - Iterate keys en un HashMap

Estas en el tema de Ibatis - Iterate keys en un HashMap en el foro de Java en Foros del Web. Tengo una clase que contiene un LinkedHashMap con valores para los campos de una BD, siendo la key el nombre de cada uno. Estos valores ...
  #1 (permalink)  
Antiguo 13/07/2010, 14:18
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Ibatis - Iterate keys en un HashMap

Tengo una clase que contiene un LinkedHashMap con valores para los campos de una BD, siendo la key el nombre de cada uno. Estos valores provienen de archivos creados por los usuarios y para disitintas tablas, por lo que para hacer un insert necesito asegurar el orden y que el nombre de los campos es el correcto.

INSERT INTO tabla (campo1,campo2,campo3) VALUES (valor1,valor2,valor3)

El problema es que por lo que he visto, mediante la etiqueta <iterate> sólo puedo obtener los valores, no las keys.


Necesitaría algo así

Código:
<insert id="insertar" parameterClass="clasemodelo">

INSERT INTO tabla (

<iterate property="mapa" conjunction=",">
    
  #mapa[].key# <===  Esto es lo que creo que no se puede hacer

</iterate>

) VALUES (

<iterate property="mapa" conjunction=",">
    
  #mapa[]# <===  Esto sí funciona para valores

</iterate>

)
He leído por ahí soluciones como añadir un elemento al mapa que sea una lista de los campos, pero preferiría evitarlo ya que me imagino que tiene que haber una forma más elegante.

¿Existe alguna forma cómoda de hacer lo que quiero de forma directa, pasando parámetros o con statements?

Saludos y gracias
  #2 (permalink)  
Antiguo 22/07/2010, 18:15
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Ibatis - Iterate keys en un HashMap

Al final no he encontrado la solución que quería, así que he recurrido a un apaño.

En el objeto utilizado como parameterClass he añadido dos nuevas referencias, los values y keys del Map, de esta forma no incremento el consumo de la memoria repitiendo el mismo contenido del Map. Eso sí, hay que recordar que si sustituimos (no hablo de modificar) el Map debemos actualizar estas referencias.

Hay un problema, estas dos referencias son un Set (keys) y Collection (Values), pero la iteración de ibatis sólo admite List y array[], por lo que finalmente he tenido que construir un método get para cada una de ellas que además convierta el Set y Collection en objects List (no hay cast directo) .

Esto me hace pensar que finalmente no era necesario crear las referencias a los keys y values, ya que ibatis buscará un método get con el nombre de la propiedad que le indiquemos, por lo que llegaría con crear el getValues y getKeys conversores a List (no lo he probado).

Etiquetas: ibatis, keys
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:50.