Я использую 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
, для которого имя столбца будет company_id
и будет упоминаться как comapny.id
в JPA.