2016-05-24 9 views
0

私は次の機能を提供CriteriaQueryを構築しよう:基準アピ:オーダー/暗黙の関連テーブルによって選択

table_a:

id, name_a 

私は以下のフィールドを持つ3つのテーブルを持っています

table_b:

id, name_b 

table_ab:

ここで、table_aのすべての要素を、table_bの対応する要素のname_bフィールドの順序で取得したいとします。

結果は、JpaRepositoryで使用するための仕様でなければなりません。私の意見で

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(); 
    }; 

を主な問題はtable_bへtable_aからの「パス」がないということですが、私は明示的にしたくない:参加するどのように組み合わせるか、私がジョイン使ってみましたが、私はポイントで立ち往生table_a〜table_bの内部に参照があります。

答えて

0

あなたは春データJPAを使用しているので、あなただけのようになり、その上にメソッドとのインタフェースを行うことができます。

:あなたのTableABクラスは、このようなものであると仮定すると、

public interface TableABRepository extends Repository<TableAB, Long> { 

    public List<TableAB> findAllByOrderByTableB(); 

} 

class TableAB { 
     TableA tableA; 
     TableB tableB; 
    } 

Thakメソッドは、table_abのすべての要素をname_bフィールドの順に返します。

その後、TableAの返されたリストからTableA要素が取得されます。

関連する問題