Je cherche un critère d'hibernation à suivre:
Dokument.class est mappé sur le rôle roleId
Role.class a un contactId contactPerson
Contact.class Prénom Nom Nom
Je souhaite rechercher First ou LastName dans la classe Contact et récupérer une liste des Dokuments connectés.
J'ai essayé quelque chose comme ça:
session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();
Je reçois une erreur qui ne résout pas la propriété "LastName" pour la classe "Dokument"
Quelqu'un peut-il expliquer pourquoi les recherches de jointure sont effectuées sur Dokument et non sur toutes les tables jointes? Merci d'avance pour toute l'aide!
Le mode de récupération indique uniquement que l'association doit être extraite. Si vous souhaitez ajouter des restrictions à une entité associée, vous devez créer un alias ou un sous-critère. Je préfère généralement utiliser des alias, mais 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();
Ceci est bien entendu bien expliqué dans le manuel de référence d'Hibernate , et le javadoc pour Criteria contient même des exemples. Lisez la documentation: elle contient de nombreuses informations utiles.