Hibernate Critères:Jointure Externe gauche avec des restrictions sur les deux tableaux
-
18-09-2019 - |
Question
Je suis en train de faire une JOINTURE EXTERNE GAUCHE, mais je suis seulement en mesure d'appliquer des Restrictions sur la première table.Est-il un moyen de ti appliquer sur la seconde table ainsi?
Voici mon code:
Criteria criteria = this.crudService
.initializeCriteria(Applicant.class).setFetchMode("products",
FetchMode.JOIN);.
Cela fonctionne (le demandeur dispose d'un applicantName la propriété):
criteria.add(Restrictions.eq("applicantName", "Markos")
Aucune de ces œuvres (produit a une propriété productName)
criteria.add(Restrictions.eq("productName", "product1")
les critères.ajouter(Restrictions.eq("produits.productName", "produit1") // produits:le nom de la propriété les critères.ajouter(Restrictions.eq("Produit.productName", "produit1") // Produit:le nom de la table DB
Et c'est l'exception, je reçois à dire (si j'ai bien compris) que le nom de la propriété n'existe pas de Déposant:
EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant
J'ai essayé d'utiliser un alias, mais cela a généré une JOINTURE INTERNE, au lieu de la JOINTURE EXTERNE GAUCHE je veux.
Comment puis-je appliquer des restrictions sur les deux tableaux?
Mise à JOUR:
Problème est probablement le même que ceci:https://forum.hibernate.org/viewtopic.php?p=2393694
La solution
Vous pouvez spécifier une jointure externe gauche dans la createalias...
.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));
Être conscient que vous faites une jointure externe gauche, avec une restriction sur la colonne...essentiellement en faisant une jointure interne.Si vous aussi vous voulez les candidats sans produits, alors vous aurez à vérifier la valeur null produit trop.
Autres conseils
Mise à jour:
.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN)
.Add(Restrictions.Eq("p.inventedName", inventedName));
Je résolu ce problème mon problème créer un nouveau critère et je pourrais utiliser LEFT_OUTER_JOIN dans les deux cas.