Consulta de Hibernate criterios para la combinación entre 3 tablas

Tengo una consulta sql:

select * from A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
INNER JOIN D
ON C.id = D.id
where D.name = 'XYZ'
   and D.Sex = 'M'

He estado tratando de llegar con hibernate criterios de consulta para la anterior de sql, pero tiene problemas. Podría alguien ayudar.

  • ¿qué desea como resultado? la a instancias?
  • Speath, sí..necesito instancias de Un
  • Hibernate es todo acerca de la cartografía. Nadie sabe lo que sus entidades parecen simplemente observando la SQL. Puede ser tan simple como «en Un lugar de una.b.c.d.nombre=’XYZ’ y un.b.c.d.sexo=’M’ » o inviable si no se han adecuado las relaciones
InformationsquelleAutor user1502377 | 2012-07-04

2 Kommentare

  1. 5
    Criteria c = session.createCriteria(A.class, "a");
                        .createAlias("a.b", "b")
                        .createAlias("b.c", "c")
                        .createAlias("c.d", "d")
                        .add(Restrictions.eq("d.sex", "M"))
                        .add(Restrictions.eq("d.name", "XYZ"));
    • Cuando decimos sesión.createAlias(«un.b»,b)..crearía un inner join entre a y B?
    • Y cómo es diferente de los criterios.createAlias(«un.b»,»b») es simplemente diciendo criterios.createAlias(«b»,»b»)
    • No iba a ser diferente, sin embargo, la inicial de la llamada a createCriteria dio un alias: createCriteria(A.class, «una»). Como resultado de ello, y más referencia a los campos de la instancia necesidad de utilizar el «a.» como prefijo.
    • En realidad, no creo que debe, pero al menos ellos puede. Me parece más claro para asignar un alias a cada entidad, incluso, de la raíz de uno. Y sí, como el javadoc indica, crea un inner join.
  2. 1

    A su pregunta se desea realizar un combinación Cartesianas, y esto no es apoyado por los Criterios, aunque se puede hacer con HQL como se muestra a continuación. Hay una pregunta similar aquí

    Con la consulta HQL se podría hacer algo como:

    select a from 
       A a, 
       B b, 
       C c 
    where 
       a.id = b.id and 
       c.id = b.id and 
       d.id = c.id and 
       d.name = 'XYZ' and 
       d.sex = 'M'

    La consulta se utiliza de forma regular en una consulta de hibernate:

    Query query = session.createQuery(query); //<-- here you use the query above
    List results = query.list();
    • Tengo que usar el modo de hibernación de la consulta de los criterios para ello. Para ex – Criterios c = período de sesiones.createCriteria(Dokument.class, «dokument»); c.createAlias(«dokument.papel», «papel»); // inner join por defecto c.createAlias(«el papel.en contacto con», «contacto»); c.agregar(Restricciones.eq(«contacto.lastName», «Prueba»)); return c.lista();

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea