cómo puedo seleccionar un objeto de la clase en HQL? Cuando hago lo siguiente:

select e.class, e.name from Entity e

Hibernate devuelve un Entero (por ejemplo, [12, «nombre»]) en lugar de un objeto de la clase. ¿Cómo puedo devolver una clase de Java, o al menos la clase o nombre de la entidad? O, si esto no es posible, ¿cómo puedo convertir de 12 a una clase de Java?

Por motivos de rendimiento, yo no puede consultar la totalidad de los objetos, es decir, yo no puedo hacer

select e from Entity

Saludos,
Jochen

OriginalEl autor Jochen | 2012-03-09

4 Comentarios

  1. 8

    si hibernate4, puede utilizar HQL función type()’ para obtener un tipo de entidad

    select type(e), e.name from Entity e

    Si hibernate 3, de la sesión.iterate() devolver a la entidad HibernateProxy con id único, y usted puede conseguir el nombre de la entidad & id de ella sin inicializar.

    Iterator iterator = session.createQuery("from Entity e").iterate();
    while(iterator.hasNext()) {
        HibernateProxy object = (HibernateProxy)iterator.next();
        System.out.println(object.getHibernateLazyInitializer().getIdentifier());
        System.out.println(object.getHibernateLazyInitializer().getEntityName());
    }

    OriginalEl autor Rehtron

  2. 4

    puedes usar el addEntity() método para decirle que Hibernate utiliza la clase para asignar la respuesta

     Query query = session.createSQLQuery(
        "select e.class,e.name from Entity e where <your conditions>")
        .addEntity(Entity.class)
        List<Entity> result = query.list();
    Pero eso no HQL.

    OriginalEl autor arkrad87

  3. 1

    Escalar HQL que especifica explícitamente el nombre de la columna en la cláusula select devuelve una lista de object[] .Cada índice en el array devuelto coincidir con la correspondiente columna en la cláusula select.

    Para devolver una lista de objetos , uso select e from Entity e o simplemente from Entity .

    List<Entity> result =   (List<Entity>) session.createQuery("from Entity").list();

    Para restringir el registro devuelto por el HQL , se aplican algunas condiciones en la cláusula where de la HQL, por ejemplo: from Entity e where e.name = xxxxx

    Me pegaba a él 🙂 Cuando haya seleccionado las entidades, puede utilizar el java normal getClass llamadas para saber regresado a la clase.
    Hola, yo no puedo hacer eso, ya que yo soy la consulta de dos tropecientos registros con 100s de diferentes clases. El resultado de la consulta sería demasiado lento.
    se puede solicitar algunos cláusula where en el HQL ?

    OriginalEl autor Ken Chan

  4. 0

    Si desea restringir el número de columnas en la lista de selección, puede que nos la new operador dentro de la hql.

    Que es,

    select new Entity(e.class, e.name) from Entity e

    También, agregar un constructor correspondiente en el Entity clase que esta consulta puede utilizar.

    Esto le dará la List<Entity>, inicializado con sólo 2 valores.

    Esto es útil cuando se necesita una instantánea de un objeto Grande en un performativo. Leer aquí para la API docs o aquí para un ejemplo.

    He intentado esto, pero no funciona con los parámetros de Clase. Dejando fuera a los e.class obras.
    ¿cuál es el correspondiente al valor de Clase en DB? Espero que sea una cadena, entonces usted necesita para establecer la cadena y tratar de conseguir la clase de ella.
    Es una propiedad integrada de Hibernación. E. g. en las consultas que usted puede hacer select e.name from Entity e where e.class = Person. Sin embargo select e.class va a devolver un int, que necesito para asignar a una clase.

    OriginalEl autor ManuPK

Dejar respuesta

Please enter your comment!
Please enter your name here