Criterios de Hibernación Unirse con 3 Tablas


Estoy buscando un criterio de hibernación para obtener lo siguiente:

Dokument.clase se asigna al Rol RoleId

Rol.clase tiene una persona de contacto ContactID

Contacto.clase Nombre LastName

Quiero buscar First o LastName en la clase Contact y recuperar una lista de Dokuments conectados.

He intentado algo como esto:

session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();

Recibo un error que no se pudo resolver la propiedad " LastName "para la clase"Dokument"

Puede alguien explicar por qué ¿el join busca en Dokument y no en todas las tablas unidas? Gracias de antemano por toda la ayuda!

Author: mahatmanich, 2012-01-04

1 answers

El modo fetch solo dice que la asociación debe ser fetched. Si desea agregar restricciones en una entidad asociada, debe crear un alias o un subcriterios. Generalmente prefiero usar alias, pero YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument");
c.createAlias("dokument.role", "role"); // inner join by default
c.createAlias("role.contact", "contact");
c.add(Restrictions.eq("contact.lastName", "Test"));
return c.list();

Por supuesto, esto está bien explicado en el manual de referencia de Hibernación , y el javadoc para los Criterios incluso tiene ejemplos. Lea la documentación: tiene mucha información útil.

 107
Author: JB Nizet,
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-04-20 04:03:10