Duda con una conversión en Java

Que tal compañero, estoy teniendo problemas con un List<Map<Integer,Integer>>, te explico,
hice una consulta en Hibernate para conseguir averiguar de cada alumno la cantidad de
asignaturas en las que estaba matriculado, aquí la consulta:


public List<Map<Integer,Integer>> getAlumnosAsignaturas(){
Session session = getSession();
List<Map<Integer,Integer>> result = new ArrayList<Map<Integer,Integer>>();
try {
session.beginTransaction();
Query query = session.createSQLQuery("select e.alumno_id, sum(e.cantidadAsignaturas) from Expedientes e group by e.alumno_id");
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
result = query.list();
session.getTransaction().commit();
} catch (Exception e) {
System.out.println("Error en getElementById: " + e);
this.rollback();
}
return result;
}


La consulta la puse para contarte mi problema desde 0, pero no es
relevante para el problema. Con esa consulta obtengo un Map por cada
alumno, como cada alumno tiene un Map, cada Map es añadido a un List.
Entonces si hago lo siguiente:


List<Map<Integer,Integer>> listado = alumnoManager.getAlumnosAsignaturas();
for(Map<Integer,Integer> o : listado){
System.out.println(o.keySet()+"---"+o.values());
}


En Consola me devuelve:
[sum(e.cantidadAsignaturas), alumno_id]---[2, 1]
[sum(e.cantidadAsignaturas), alumno_id]---[2, 3]
[sum(e.cantidadAsignaturas), alumno_id]---[1, 4]


Yo lo que quiero conseguir es a partir del List<Map<Integer,Integer>> conseguir un solo
Map<Integer,Integer> donde la clave sea el alumno_id y el valor la cantidad de asignaturas quedanto el Map así:
Clave --> Valor
1 --> 2
3 --> 2
4 --> 1

Pero no sé cómo hacer esa conversión, ¿cómo podría conseguirlo?.
De antemano darte las gracias, a ver si pudieras ayudarme.
Un cordial saludo.

Respuesta
1

No se como tienes estructurada la tabla, ni tu modelo, pero ese problema me suena. Creo que recordar que era porque hibernate interpreta la sentencia sql como hql (hibernate query language). Al hacer esto se pierden los alias de la petición.

Una posible solución es decirle a hibernate cuales son los alias. Hay métodos para ello.

La otra es crear tu propio ResultTransformer para obtener la lista. (Puedes mirar la implementación que hay de hibernate y justo darle la vuelta a la devolución de los parámetros, porque efectivamente devuelve values en lugar de keys y viceversa)

Aquí te dejo una pregunta de alguien que tuvo el mismo problema. Justo debajo de la respuesta marcada hay dos mini comentarios que también hacen referencia a la creación de alias.

http://stackoverflow.com/questions/2605385/using-sql-column-names-in-hibernate-createsqlquery-result

Y aquí el javadoc de ResultTransformer.

http://www.163jsp.com/help/hibernate32api/org/hibernate/transform/ResultTransformer.html

De todos modos yo no me complicaría mucho la vida !

2 respuestas más de otros expertos

Respuesta
1

Estuve analizando tu caso y hay un amigo que tiene esto en la web, de como ordenar map. revísalo te puede servir de mucho..

http://es.softuses.com/11976

Respuesta
1

Tendrás que crear un nuevo map y recorrer la lista para coger los valores del map interior a la lista.

Mira a ver esta pagina web

http://stackoverflow.com/questions/4138364/java-how-to-convert-list-to-map

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas