私は現在、SpringデータJPAでSpringブートを使用してOracleデータベースに接続しています。一つのパラメータで私はSpringリポジトリfindById(Long id);
を使っています。一方、検索はもっと複雑です。私たちの場合、ユーザーは複数のオプションの検索パラメータを入れ子にしたJSONオブジェクトを提供しています(この時点で、データの送信方法を入れ子にしたJSONを通して変更することはできません)。スプリングデータJPA複数のジョインによる複数のオプションの検索パラメータ
@Entity
Account{
@OneToMany
List<PersonRole> role;
@OneToMany
List<AgentRole> role;
}
@Entity
PersonRole{
String role;
Person person;
}
@Entity
AgentRole{
String role;
Agent agent;
}
@Entity
Person{...}
@Entity
Agent{...}
:我々は次のエンティティを持っているバックエンドでは
すべての検索条件は、(少なくとも1つのパラメータを除く)はオプションです
{
"agent_filter": {
"first_name": "string",
"last_name": "string",
"agentNumber": "string",
"agentCode": "string"
},
"account": "string",
"status": "string",
"paid": "string",
"amount": "string",
"person_filter": {
"date_of_birth": "string",
"first_name": "string",
"last_name": "string",
"tax_id": "string"
}
}
:ここではJSON入力オブジェクトは、次のようになります
検索機能を提供するために、私は複数の結合を行うことができます。 @Query表記でJPQLを使い始めましたが、各パラメータでis null or
のチェックをしなければならず、大きな混乱が生じました。私は他のオプションを調べ始めて、QueryDSL、基準、仕様についての情報を見ましたが、どちらに焦点を当てて学ぶべきかはわかりませんでした。残念なことに、私はこのテーマについてはあまりよく分かりません。私は、この検索の優れた実装のために誰かが正しい方向に向けることを期待しています。ありがとうございました!
あなたの答えをありがとう、私はそれを調べ、すぐに試してみるつもりです。私はそれがどのように進むのかを知らせます。ありがとう! – ejgreenwald
DSLをクエリすると@OneToManyリストでフィルタリングできますか?私の例を見ると、代理人のファーストネームでセレクトできますか?エージェントはリストの1つですが? – ejgreenwald
これはおそらくジョインを必要とするため、クエリを作成するときに親と子の間で結合し、次にエージェントにフィルタを追加します。これを行う必要がある場合は、JpaRepositoryを使用することができません - QueryDSLを直接使用する必要があります。 –