我有3个实体Agent
,Person
和Machine
abstract Agent
Long id
Person extends Agent
String firstName
String lastName
Machine extends Agent
String label
我搜索了一个解决方案,在给定参数"name"
上查询我的所有代理,该参数将在firstName
的{{1}}和lastName
或Person
的标签上查找1}}。
是否可以使用jpql查询?
由于
答案 0 :(得分:1)
我有点晚了但是自从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);
在缺点方面,我会重新考虑你的类结构,这将导致联合查询,如果你可以在超类上使用具有共同属性的投影,那么结果查询可能会更便宜。