Service.java
private String sid;
private String serviceName;
private List<Feature> feature;
Feature.java
private Long id;
private String featureName;
我建立的谓词如下
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Predicate;
BooleanBuilder booleanBuilder = new BooleanBuilder();
booleanBuilder.and(QService.service.id.eq(id));
booleanBuilder.and(QFeature.feature.usoc.eq(featureUsoc));
Predicate predicate = booleanBuilder;
serviceRepository.findAll(predicate);
当我查询repo时,我得到以下错误信息
nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: illegal attempt to dereference collection [{synthetic-alias}{non-qualified-property-ref}feature] with element property reference [featureName] [select service
from com.ws.app.model.Service service
where service.id = ?2 and feature.featureName = ?3]]
如果实体中的变量是List类型,如何为其建立谓词查询?
你需要一个JOIN或子查询到相关的路径。
query().from(QService.service)
.where(QService.service.id.eq(id))
.where(query().from(QService.service.feature, QFeature.feature)
.where(QFeature.feature.usoc.eq(featureUsoc))
.exists())
.fetch()
Join:
query().from(QService.service)
.innerJoin(QService.service.feature, QFeature.feature)
.on(QFeature.feature.usoc.eq(featureUsoc))
.where(QService.service.id.eq(id))
.fetch()