qbc left example ejemplo hibernate hibernate-criteria nhibernate-projections

left - ¿Cuándo usar las proyecciones de Hibernate?



nhibernate restrictions (3)

Estoy un poco confundido acerca de las proyecciones y los criterios de Hibernate. ¿Cuándo usar proyecciones y cuándo usar criterios?

Por favor, ayúdame. ¡Gracias!


La proyección es una interfaz dada en el paquete "org.hibernate.criterion", Projections es una clase dada en el mismo paquete, en realidad Projection es una interfaz, y Projections es una clase y es una fábrica para producir objetos de proyección.

En la clase de proyecciones, tenemos todos los métodos estáticos y cada método de esta clase devuelve el objeto de interfaz de proyección.

Si queremos agregar un objeto de proyección a Criteria, entonces debemos llamar a un método setProjection ()

Recuerde, al agregar un objeto de proyección a los criterios, es posible agregar un objeto a la vez. Significa que si agregamos el segundo objeto de proyección, este 2º reemplazará al primero (el primero no funcionará), de modo que a la vez solo podemos un objeto de proyección para el objeto de criterio

Usando criterios, si queremos cargar un objeto parcial desde la base de datos, entonces necesitamos crear un objeto de proyección para la propiedad que se va a cargar desde la base de datos

Criteria crit = session.createCriteria(Products.class); crit.setProjection(Projections.proparty("proName")); List l=crit.list(); Iterator it=l.iterator(); while(it.hasNext()) { String s = (String)it.next(); // ---- print ----- }

Si agregamos proyecciones múltiples a los criterios, se considerará que la última proyección añadida se ejecutará ...

Criteria crit = session.createCriteria(Products.class); Projection p1 = Projection.property("proName"); Projection p2 = Projection.property("price"); crit.setProjection(p1): crit.setProjection(p2): List l=crit.list();


Las proyecciones se usan para ejecutar operaciones agregadas y para obtener una consulta de columna individual, con Restricciones podemos acceder a un FILA pero con PROYECCIONES podemos acceder a COLUMNA completa

EX -

public static void main(String[] args) { SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory(); Session session = factory.getCurrentSession(); try { session.beginTransaction(); Criteria c = session.createCriteria(Student.class); Projection p = Projections.property("lastName"); List<String> students = c.setProjection(p).list(); for(String s:students) System.out.println(s); session.getTransaction().commit(); session.close(); } finally { factory.close(); } }

En el ejemplo anterior utilicé la llamada de proyección para AGREGAR una propiedad de proyección "nombre" a los criterios. Devuelve winchester winchester winchester winchester, que es el apellido COLUMN en la tabla.

Salida =

Hibernate: seleccione this_.last_name como y0_ del estudiante this_ winchester winchester winchester winchester

Nota: Podemos agregar solo una proyección, si agregamos más de 1 proyección, se anulará la anterior. si desea agregar más de una proyección, necesitará la clase ProjectionList

Mesa Orignal -


No son mutuamente excluyentes, puede usar ambos al mismo tiempo. Las proyecciones generalmente se usan en el contexto de algunos Criterios.

Para simplificar, las proyecciones de Hibernate se utilizan para consultar solo un subconjunto de los atributos de una entidad o grupo de entidades que está consultando con Criteria. También puede usar proyecciones para especificar cláusulas distinct y funciones agregadas como max , sum , etc. Es como referirse a los datos que está buscando. Al igual que la modificación de la cláusula de select en una consulta SQL.

Los criterios de Hibernate se utilizan para definir las condiciones que los datos deben cumplir para poder ser seleccionados. Es como referirse a cómo están obteniendo los datos. Como modificar las cláusulas from y where de una consulta SQL.

Tenga en cuenta que este cómo y qué no es estrictamente cierto, es solo una orientación destinada a ayudar al OP. Puede cambiar los datos que está buscando con createCriteria(String associationPath) por ejemplo.

Sugiero echar un vistazo a este artículo Hibernate: Consultas de criterios en profundidad