2009-06-04 13 views

Respuesta

51

Esto es exactamente lo que las proyecciones son para. Aquí está un ejemplo:

Criteria cr = session.createCriteria(User.class) 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("id"), "id") 
     .add(Projections.property("Name"), "Name")) 
    .setResultTransformer(Transformers.aliasToBean(User.class)); 

    List<User> list = cr.list(); 

De hecho, si nos fijamos en la documentación de "propiedad perezoso ir a buscar" que específicamente dicen:


"A (? Mejor) manera diferente para evitar la columna innecesaria lee, al menos para las transacciones de solo lectura es usar las características de proyección de las consultas HQL o Criteria. Esto evita la necesidad de procesamiento de bytecode de tiempo de compilación y es ciertamente una solución preferida ".


Por cierto, hay una cuestión relacionada que también puede estar interesado en: Hibernate Query By Example and Projections

+4

¿Es posible hacerlo a través de HQL querry? – Antoniossss

1

Normalmente, no desea cargar parcialmente las propiedades de un objeto. Pero si debe hacerlo, ve esto:

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/performance.html#performance-fetching-lazyproperties

Para el comportamiento normal de informes similar se puede utilizar consultas de entidad:

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class); 

http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e17633

4

Estoy muy tarde responder a esta, pero, se puede añadir un transformador resultado personalizada a la consulta objeto como a continuación.

Query query = session 
     .getNamedQuery(
       "someNamedQueryWhichISHQL") 
     .setString("cod", "10") 
     .setResultTransformer(new ResultTransformer() { 

      public Object transformTuple(Object[] row, String[] arg1) { 
       User usr = new User(row[0],row[1]); 
       return usr 
      } 

      public List transformList(List arg0) { 

       return arg0; 
      } 
     }); 
return query.list(); 
Cuestiones relacionadas