Cómo devolver una entidad con columnas elegidas utilizando Criterios
Soy realmente nuevo con Hibernate. Quiero un List<User>
usando criterios de hibernación, pero solo con los campos id de usuario y nombre rellenados. Es eso posible? Algo así como la consulta que se muestra a continuación:
SELECT user.id, user.name FROM user
Saludos.
3 answers
Para esto son exactamente las proyecciones. He aquí 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 "lazy property fetching" dicen específicamente:
"Un diferente (mejor?) la forma de evitar lecturas innecesarias de columnas, al menos para transacciones de solo lectura, es usar las características de proyección de HQL o consultas de Criterios. Esto evita la necesidad de procesamiento de código de bytes en tiempo de compilación y es sin duda una solución preferida."
Por cierto, hay un pregunta relacionada que también le puede interesar: Consulta de Hibernación Por Ejemplo y Proyecciones
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:24
Llego muy tarde a responder esto, pero, puede agregar un transformador de resultados personalizado al objeto de consulta como se muestra 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();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-10 19:58:27
Normalmente no desea cargar parcialmente las propiedades de un objeto. Pero si es necesario, vea esto:
Para un comportamiento similar a un informe simple, puede usar 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-25 13:21:56