2

3 つのエンティティAgentPersonあり、Machine

abstract Agent
  Long id

Person extends Agent
  String firstName
  String lastName

Machine extends Agent
   String label

"name"指定されたパラメータですべてのエージェントにクエリfirstNameを実行するソリューションを探しました。lastNamePersonMachine

jpqlクエリで可能ですか?

ありがとう

4

1 に答える 1

2

少し遅れましたが、(instanceOf の使用を修正した) querydsl 3.6.2 以降、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 に答える