在多子类上查找不同的属性

时间:2011-07-05 09:08:45

标签: java jpa jpql querydsl

我有3个实体AgentPersonMachine

abstract Agent
  Long id

Person extends Agent
  String firstName
  String lastName

Machine extends Agent
   String label

我搜索了一个解决方案,在给定参数"name"上查询我的所有代理,该参数将在firstName的{​​{1}}和lastNamePerson的标签上查找1}}。

是否可以使用jpql查询?

由于

1 个答案:

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

在缺点方面,我会重新考虑你的类结构,这将导致联合查询,如果你可以在超类上使用具有共同属性的投影,那么结果查询可能会更便宜。