2

我有 3 个实体AgentPerson并且Machine

abstract Agent
  Long id

Person extends Agent
  String firstName
  String lastName

Machine extends Agent
   String label

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

是否可以使用 jpql 查询?

谢谢

4

1 回答 1

2

我有点晚了,但由于 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);

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

于 2016-03-23T10:10:15.613 回答