查询中的JPA谓词

查询中的JPA谓词,jpa,Jpa,我有一个route类,在这个类中,我定义了一个位置集合 @ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY) @JoinTable(name = "route_location_map") private List<Location> locations; @ManyToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY) @JoinT

我有一个route类,在这个类中,我定义了一个位置集合

@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
    @JoinTable(name = "route_location_map")
    private List<Location> locations;
@ManyToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinTable(name=“路线位置地图”)
私人名单地点;
我需要的是检查我的路线中是否有特定的位置

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

                 predicate = builder.isMember(locationId, locations);

                whereClauseList.add(predicate);
if(locationId!=null&&locationId.longValue()>0){
表达式位置=route.get(“位置”).get(“id”);
谓词=builder.isMember(locationId,locations);
其中子句列表添加(谓词);
不幸的是,这个逻辑不起作用,我也没有得到任何错误。
有人能帮我解决这个问题吗?

下一步发布stacktrace。您需要在实体或表达式中使用isMember()

public List<Route> findRoutes(Location location){
    ...
    Expression<Collection<Location>> locations = route.get("locations");
    predicate = builder.isMember(location, locations);
    ...
}
公共列表findrootes(位置){
...
表达式位置=route.get(“位置”);
谓词=builder.isMember(位置,位置);
...
}

“不工作”?您的JPA提供商的日志告诉您具体是什么?等效的JPQL?调用的SQL?route.get.get行也有缺陷…它将为位置的“id”字段提供表达式,而不是id集合!