Я немного опоздал, но, поскольку querydsl 3.6.2 (который исправил использование instanceOf), вы можете сделать это с помощью кода Java.
BooleanBuilder builder = new BooleanBuilder();
QAgent qAgent = QAgent.Agent;
builder.or(qAgent.as(QPerson.class).firstName.eq("someFirstName")
.and(qAgent.instanceOf(Person.class));
builder.or(qAgent.as(QMachine.class).label.eq("someLabel")
.and(qAgent.instanceOf(Machine.class));
Page<Agent> agentsPage = agentRepository.findAll(builder);
С другой стороны, я бы пересмотрел вашу структуру классов, это приведет к запросам объединения, если вы могли бы использовать проекцию с общими свойствами для суперкласса, возможно, результирующий запрос будет дешевле.