Tengo esta tabla :

table name : Account
Fields : id (varchar), name(varchar), other fields...

Quiero consultar esta tabla con hibernate mecanismo (para utilizar el segundo nivel de caché). El resultado de la consulta de hibernate debe ser un hash mapa donde la clave es el campo id y donde el valor es el nombre del campo.

¿Cómo puedo escribir con HQL ?

Si puedo usar el mapa, sólo puedo usar alias y si puedo usar un constructor con un objeto, debo transformar resultado para hashmap que es mucho tiempo.

Example : 
Id | name | other fields
1 Jerome ...
2 Steve ...
3 Nick ...

el resultado de la consulta debe ser un hashmap :

1>Jerome
2>Steve
3>Nick

gracias

OriginalEl autor Jerome Cance | 2011-01-19

6 Comentarios

  1. 11

    Esta pregunta es viejo, pero esto podría ayudar a otras personas.
    Ahora puede utilizar HQL para volver mapas con hibernate.
    Usar algo como esto:

    select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n ) from Cat cat

    De hibernación docs:
    http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select

    hace más de 1 año 1/2, puedo actualizar mi aceptado respuesta ! Esto era exactamente lo que estaba buscando. Esto es un poco demasiado tarde, pero una información útil !

    OriginalEl autor tbraun

  2. 5

    Creo que lo más cerca que se puede obtener es el uso de esta consulta:

    select id, name from Account

    que voy a dar un resultado conjunto de dos matrices de longitud. Tendrás que construir el mapa de forma manual, así:

    for(Object[] row : rs) {
        map.put(row[0], row[1]);
    }

    Tenga en cuenta que este se ignoran en gran medida la caché de segundo nivel y se traducen en una consulta SQL.

    OriginalEl autor sblundy

  3. 0

    Suponiendo por el momento que la Cuenta no tiene no perezosa asociaciones que iba a ser cargado, el siguiente es simplemente el mejor que vas a obtener, en cuanto al rendimiento:

    List<Account> accounts = (List) session.createQuery("from Account").list();
    for (Account account : accounts) map.put(account.getID(), account.getName());

    Esto puede ser «tiempo» pero no es como Hibernate puede de alguna manera por arte de magia evitar el paso de poner cada fila devuelta en un mapa.

    A diferencia de la otra respuesta, esto debería beneficiarse de la caché de segundo nivel.

    OriginalEl autor Alex Godofsky

  4. 0

    Hiii…

    A continuación el código podría ayudar.

        Query query = session.createQuery("select id, name from table");
        List results = query.list();

    Para mostrar los resultados en forma de objetos funciona:

        int i;
        int j;
        Object object = null;
        for (i = 0; i < results.size(); i++) {
    
            System.out.println("-------");
            Object[] obj = (Object[]) results.get(i);
            for (j=0;j<obj.length;j++)
            {
                System.out.println(obj[j]);
            }
            System.out.println("-------");
    
        }

    Editar : puede utilizar que los resultados de objetos como mapa y estás hecho.

    OriginalEl autor Ashfak Balooch

  5. -1

    lugar de por defecto utilizando el nombre de la entidad puede aplicar la entidad-nombre hbm.xml archivo.

    por Ejemplo

    el uso de este, hibernate dar el par de clave/valor que significa devolver el mapa.

    OriginalEl autor Ganesh Shirsat

Dejar respuesta

Please enter your comment!
Please enter your name here