我正在使用QueryDsl根据搜索词动态生成查询谓词。
数据模型如下所示
@Entity
class Person {
long id;
String name;
.
.
Company company;
}
@Entity
class Company {
@Id
long id;
}
现在,我正在尝试创建一个用于在表中搜索的搜索词。
mapData.entrySet().stream().map(entry -> {
try {
if (entry.getValue() != null) {
SimplePath<T> fieldPath = Expressions.path(entityClass, entry.getKey().toString());
Field field = entityClass.getField(entry.getKey().toString());
if (field.getType().getAnnotation(Entity.class) == null ) {
SimplePath<?> personFirstName = Expressions.path(field.getType(), fieldPath, field.getName());
Expression<?> constant = Expressions.constant(entry.getValue());
return Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant);
} else {
//HANDLE FOREIGN KEY
}
}
}catch (NoSuchFieldException e) {
e.printStackTrace();
}
return null;
})
此代码可帮助我为除company
之外的所有成员添加条件。我试图找出如何为Company
添加条件的条件,在JPA中其列名将为company_id
并被称为comapny.id
。