2011-09-21 12 views

Respuesta

74

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 las cláusulas distinct y agregar funciones como max, sum, etc. Es como referirse a que datos está buscando. Como modificar la cláusula select en una consulta SQL.

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

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

me gustaría sugerir a echar un vistazo a este artículo Hibernate: Criteria Queries in Depth

+2

y es útil para contar() como -> retorno (Número) session.createCriteria ("Libro"). SetProjection (Projections.rowCount()). UniqueResult(); –

1

proyección es una interfaz dada en el paquete “org.hibernate.criterion”, proyecciones es una clase dada en el mismo paquete, en realidad es una interfaz de proyección, 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 añadir un objeto de proyección a Criteria entonces tenemos que llamar a un método setProjection()

Recuerde, mientras que la adición de objetos de proyección de criterios, es posible añadir un objeto a la vez.Significa que si agregamos el 2º objeto de proyección, este 2º reemplazará al primero (el primero no funcionará), por lo que a la vez solo se puede proyectar un objeto al objeto de criterios

Usando criterios, si queremos cargar objeto parcial de la base de datos, entonces tenemos que 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 sumamos múltiples proyecciones de criterios, entonces se considerará la última proyección añadido para ejecutar ver ...

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(); 
+1

¿Cómo responde esto la pregunta? – 000

+1

enlace al original http://www.java4s.com/hibernate/working-with-hibernate-projections-in-criteria/ –

0

Las proyecciones se utilizan para ejecutar las operaciones de agregados y para obtener la consulta de una sola columna, con limitaciones, podemos acceder a una FILA pero con las proyecciones podemos acceder a toda COLUMNA

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 lo anterior ejemplo, utilicé una llamada de proyección para AGREGAR un "nombre" de propiedad de proyección a los criterios. Devuelve winchester winchester winchester winchester, que es el apellido COLUMNA en la tabla.

salida =

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

Nota - podemos añadir una sola proyección, si agregue más de 1 proyección anterior se anulará. Si desea agregar más de una proyección que se Nedd clase ProjectionList

de Orignal Tabla -

enter image description here

Cuestiones relacionadas