Frage

Ich mache eine LEFT OUTER JOIN, aber ich bin nur in der Lage Beschränkungen der ersten Tabelle anzuwenden. Gibt es eine Möglichkeit ti auf der zweiten Tabelle gelten auch?

Hier ist mein Code:

Criteria criteria = this.crudService
        .initializeCriteria(Applicant.class).setFetchMode("products",
              FetchMode.JOIN);.

Das funktioniert (Antragsteller hat eine applicantName Eigenschaft):

criteria.add(Restrictions.eq("applicantName", "Markos")

Keines dieser Werke (Produkt hat eine Eigenschaft Product)

criteria.add(Restrictions.eq("productName", "product1")

criteria.add (Restrictions.eq ( "Products.ProductName", "product1") // Produkte: der Name der Eigenschaft criteria.add (Restrictions.eq ( "wizard.productName", "product1") // Produkt: der Name der DB-Tabelle

Und das ist die Ausnahme Ich erhalte sagen (wenn ich das richtig verstehe), dass die Eigenschaft nicht in Product Anmelderin existiert:

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

Ich habe versucht, einen Aliasnamen zu verwenden, aber dies erzeugt ein INNER JOIN anstelle der LEFT OUTER JOIN ich will.

Wie kann ich gelten Einschränkungen auf beiden Tabellen?

UPDATE:

Ausgabe ist wahrscheinlich das gleiche wie folgt aus: https://forum.hibernate.org/viewtopic.php?p=2393694

War es hilfreich?

Lösung

Sie können die äußere Verknüpfung angeben links in den Create ...

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));

Beachten Sie, dass Sie mit einer Beschränkung dieser Spalte eine linke äußere Verknüpfung tun ... im Wesentlichen so dass es eine innere Verknüpfung. Wenn Sie auch Bewerber wollen, ohne Produkte dann werden Sie haben auch für null Produkt zu überprüfen.

Andere Tipps

Update:

.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN)
.Add(Restrictions.Eq("p.inventedName", inventedName));

Ich löste dieses mein Problem ein neue Kriterien zu schaffen, und ich LEFT_OUTER_JOIN in beiden Fällen nutzen könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top