Frage

Ich möchte mich für genau Hibernate Criteria API verwenden, was jeder sagt, wahrscheinlich Anwendungsfall Anwendung komplexer Suchkriterien seiner am wahrscheinlichsten ist. Das Problem ist, die Tabelle, die ich gegen abfragen will, ist nicht ganz primitiver Werten zusammengesetzt, aber teilweise von anderen Objekten, und ich brauche gegen derjenigediejenigedasjenige Objekte IDs abzufragen.

Ich fand dieser Artikel von 2 Jahren, dass es nicht möglich vermuten lässt. Hier ist, wie ich es ohne Erfolg versuchte, gibt es anderen Aspekt von Hibernate, wo ich weiß, wo diese Art von Punktnotation wird in Stringliterale unterstützt Objekt Verschachtelung anzuzeigen.

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

EDIT:

Hier ist mein richtig Code einkalkuliert zum Erreichen, was ich oben versuche, den Vorschlag von der ersten Antwort unter Verwendung von unten; beachten Sie, dass ich noch einen zusätzlichen createCriteria Anruf mit in noch eine anderen zugehörigen Objekt / Tabelle auf einem Attribut bestellen:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
War es hilfreich?

Lösung

Nicht ganz sicher, dass ich folge Ihrem Beispiel, aber es ist durchaus möglich, Filterbedingungen auf einer zugehörige Einheit zu spezifizieren, einfach durch Verschachtelung Kriterien Objekte einen Baum zu bilden. wenn ich ein Unternehmen genannt habe zum Beispiel Auftrag mit einer Viele-zu-Eins-Beziehung zu einem Benutzern Einheit, kann ich alle Aufträge für einen Benutzer namens Fred mit einer Abfrage finden wie folgt aus:

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

Wenn Sie sprechen über eine Entität, die eine Beziehung zu sich selbst hat, die so gut funktionieren sollte. Sie können auch „name“ mit „id“ ersetzen, wenn Sie auf die ID eines zugehörigen Objekts filtern müssen.

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