2017-04-05 50 views
0

我嘗試在連接列上使用Spring數據JPA投影,但沒有成功。春天的數據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 

我想什麼do是在這個連接上添加一個where子句,例如:

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

我知道我可以使用一個SPEL表達在@Value做到這一點,但隨後春天將獲取實體的所有列而不僅僅是投影投影(開放投影)。

我也試過一個JPA規範在我的倉庫投影相結合:

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

但似乎我們不能混用規格和預測。

任何想法如何做到這一點?謝謝:)

+0

FWIW Spring沒有生成任何查詢。你的JPA提供者確實。 –

回答