我有3个实体Agent
,Person
和Machine
abstract Agent
Long id
Person extends Agent
String firstName
String lastName
Machine extends Agent
String label
我搜索了一种解决方案,以查询给定参数
"name"
上的所有代理,该参数将在firstName
和lastName
的Person
或Machine
的标签上查找。jpql查询可能吗?
谢谢
最佳答案
我有点晚了,但是自从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);
不利的一面是,我会重新考虑您的类结构,这将导致联合查询,如果您可以在超类上使用具有公共属性的投影,则结果查询可能会更便宜。