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!
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.
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