2016-05-24 21 views
0

ich versuche, eine CriteriaQuery zu bauen, die die folgenden Funktionen bietet:Kriterien Api: Bestellung/Auswahl nach implizit verknüpften Tabelle

Ich habe drei Tabellen mit den folgenden Feldern:

TABLE_A:

id, name_a 

Table_B:

id, name_b 

table_ab:

Jetzt möchte ich alle Elemente aus Tabelle_a nach dem Name_b-Feld des entsprechenden Elements in Tabelle_b sortiert bekommen.

Das Ergebnis sollte eine Spezifikation für die Verwendung in einem JpaRepository sein. Ich habe versucht, Joins, aber ich an der Stelle stecken, wie man kombiniert die Verbindungen:

Specification<TableA> specification = (root, query, cb) -> { 
     CriteriaQuery<TableAb> abQuery = cb.createQuery(TableAb.class); 
     CriteriaQuery<TableB> bQuery = cb.createQuery(TableB.class); 

     Root<TableAb> abRoot = abQuery.from(TableAb.class); 
     Join<TableAb, TableA> aJoin = abRoot.join("tableA"); 
     Join<TableAb, TableB> bJoin = abRoot.join("tableB"); 

     //combine joins 

     query.orderBy(cb.asc(/* Expression to order by */)); 
     return cb.conjunction(); 
    }; 

Meiner Meinung nach ist das Hauptproblem ist, dass es kein „Weg“ von TABLE_A ist zu Table_B, aber ich ausdrücklich nicht will eine Referenz innerhalb von Tabelle_a bis Tabelle_b haben.

Antwort

0

Da Sie verwenden Spring Data JPA, können Sie nur eine Schnittstelle mit einer Methode darauf, die wie folgt aussehen:

public interface TableABRepository extends Repository<TableAB, Long> { 

    public List<TableAB> findAllByOrderByTableB(); 

} 

Ihre TableAB Klasse Unter der Annahme, ist so etwas wie folgt aus:

class TableAB { 
     TableA tableA; 
     TableB tableB; 
    } 

Die Thak-Methode gibt alle Elemente von table_ab zurück, geordnet nach dem Feld name_b.

Danach erhalten Sie nur die TableA-Elemente aus der zurückgegebenen Tabelle TAB.