2017-04-05 20 views
0

結合データ型の条件付きSpringデータJPA予測を成功させようとします。Springデータjpa:投影フィールドにwhere句を追加します。

interface CarProjection { 
    String getName(); 
    List<String> getColorsLabel(); 
} 

class Car{ 
    String name; 

    @OneToMany(mappedBy = "car") 
    List<Color> colors; 
} 

class Color{ 
    String label; 

    @ManyToOne 
    Car car; 
} 

そして、次のリポジトリ方法:

List<CarProjection> findAllBy(); 

何もかもがうまく機能し、春には次のクエリを生成します。

[....] left outer join color colors1_ on car0_.id=colors1_.car_id 

私がしたい以下のクラスを考えると

この結合にwhere句を追加することです(例:

0123)。プロジェクション・クラスで
[....] left outer join color colors1_ on (car0_.id=colors1_.car_id AND colors1_.location='EXTERIOR') 

、それはのようなもの与えるだろう:

interface CarProjection { 
    String getName(); 
    @Where("label=='EXTERIOR'") 
    List<String> getColorsLabel(); 
} 

を私はこれを行う@valueでのspel式を使用することができます知っているが、その後、春には、エンティティのすべての列を取得します投影されたものだけではなく(開いた投影)。

私も自分のリポジトリに投影してJPA仕様を結合しようとした:

List<CarProjection> findAllBy(Specification<CarProjection> specification); 

しかし、我々が仕様や予測を混在させることはできませんようです。

これはどのようにするのですか?ありがとう:)

+0

FWIW Springはクエリを生成しません。 JPAプロバイダが行います。 –

答えて

1

あなたは投影でこれを行うことはできません。

List<CarProjection> findByColor_Label(String label); 

それは参加してwhere句を追加していないかもしれないが、後に - クエリ全体に適用:同じように、クエリで何かをWHERE句を追加します。しかし、最終結果は同じでなければならない。

文書:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

関連する問題