Querydsl использует внешний ключ в предикате - PullRequest
0 голосов
/ 15 апреля 2019

Я использую 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.

...