Los criterios de Hibernate se unen a 3 tablas

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

Dokument.class se asigna a Role roleId

Role.class tiene un ContactPerson contactId

Contact.class Nombre Apellido

Deseo buscar First or 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(); 

Me sale un error no pude resolver la propiedad “LastName” para la clase “Dokument”

¿Alguien puede explicar por qué la unión busca en Dokument y no en todas las tablas unidas? ¡Gracias de antemano por toda la ayuda!

El modo de búsqueda solo dice que la asociación debe ser recuperada. Si desea agregar restricciones a una entidad asociada, debe crear un alias o un subcriterio. 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(); 

Esto, por supuesto, está bien explicado en el manual de referencia de Hibernate , y el javadoc para Criteria incluso tiene ejemplos. Lea la documentación: tiene mucha información útil.

    Intereting Posts