我有3个实体AgentPersonMachine

abstract Agent
  Long id

Person extends Agent
  String firstName
  String lastName

Machine extends Agent
   String label


我搜索了一种解决方案,以查询给定参数"name"上的所有代理,该参数将在firstNamelastNamePersonMachine的标签上查找。

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);


不利的一面是,我会重新考虑您的类结构,这将导致联合查询,如果您可以在超类上使用具有公共属性的投影,则结果查询可能会更便宜。

10-07 20:55