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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top