2017-01-18 6 views
0

私はルートクラスを持っています。このクラスでは、私は場所のコレクションを定義しました。私は必要な何 クエリのJPA述語

@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY) 
    @JoinTable(name = "route_location_map") 
    private List<Location> locations; 

は、特定の場所が

if (locationId != null && locationId.longValue() > 0) { 
       Expression<Collection<Long>> locations = route.get("locations").get("id"); 

       predicate = builder.isMember(locationId, locations); 

       whereClauseList.add(predicate); 

は残念ながら、この論理が働いていない、私はあまりにもすべてのエラーを取得できませんでした私のルートに存在してチェックすることです。 これを解決する手助けができますか?

+0

"動作していません"? JPAプロバイダのログには、正確に何が表示されますか?同等のJPQL? SQLが呼び出されましたか? –

+0

また、route.get.get行に欠陥があります... idsのコレクションではなく、Locationの "id"フィールドの式を提供します! –

答えて

0

次にスタックトレースを送信します。エンティティまたは式でisMember()を使用する必要があります。

public List<Route> findRoutes(Location location){ 
    ... 
    Expression<Collection<Location>> locations = route.get("locations"); 
    predicate = builder.isMember(location, locations); 
    ... 
}