エンティティのフィルタリング
導入
基本的なCRUD機能がエンティティに実装された後、エンティティの属性に対してさまざまなフィルタを作成したいという、非常に一般的な要求があります。 これにより、サーバをより効果的に使用できるようになります。これらのフィルタは、すべてのクライアント(およびすべてのブラウザ)がそれを使用できるように、リクエストパラメータとして送信される必要があります。 さらに、これらのフィルタは、合理的で簡潔なパターンに従う必要があり、自由に組み合わせることができなければなりません。
アクティブにする方法
注意:filter
はreactive
と互換性がありません。
jhipster entity
コマンドを使用してエンティティを生成する際に、サービスまたはサービス実装を選択して、このエンティティのフィルタリングを有効にします。
既存のエンティティのフィルタを有効にする場合は、プロジェクトの.jhipster
ディレクトリでエンティティ構成を変更します。変更するには、service
をserviceClass
に、またはserviceImpl
をno
とし、jpaMetamodelFiltering
をtrue
に設定して、jhipster entity <エンティティ名>
で再生成します。
JDLを使用する場合は、JDLファイルに行filter <エンティティ名>
を追加し、jhipster jdl
コマンドを使用して定義を再インポートします。
パブリック・インタフェース
エンティティごとに、エンティティジェネレータでフィルタリングを有効にできます。その後、次のパラメータを使用して/api/my-entity
GETエンドポイントを呼び出すことができます。
- 各xyzフィールド用
- xyz.equals=someValue
- xyzが'someValue'な、すべてのエンティティをリストします。
- xyz.in=someValue,otherValue
- xyzが'someValue'または'otherValue'な、すべてのエンティティをリストします。
- xyz.specified=true
- xyzはNULLではない、すべてのエンティティをリストします。
- xyz.specified=false
- xyzはNULLまたは未指定となる、すべてのエンティティをリストします。
- xyz.equals=someValue
- xyzのタイプが文字列の場合
- xyz.contains=something
- xyzに'something'が含まれる、すべてのエンティティをリストします。
- xyz.contains=something
- xyzが数値型または日付型のいずれかである場合
- xyz.greaterThan=someValue
- xyzが'someValue'より大きくなる、すべてのエンティティを リストします。
- xyz.lessThan=someValue
- xyzが'someValue'より小さくなる、すべてのエンティティをリストします。
- xyz.greaterThanOrEqual=someValue
- xyzが'someValue'以上となる、すべてのエンティティをリストします。
- xyz.lessThanOrEqual=someValue
- xyzが'someValue'以下となる、すべてのエンティティをリストします。
- xyz.greaterThan=someValue
これらは自由に組み合わせられます。
このフィルターAPIの表現力を体験する良い方法は、JHipsterアプリケーションのAPIドキュメント・ページにあるswagger-uiから使用することです。
実装
この機能を有効にすると、EntityQueryService
という名前の新しいサービスとEntityCriteria
が生成されます。SpringはリクエストパラメータをEntityCriteria
クラスのフィールドに変換します。
EntityQueryService
では、クライテリアオブジェクトを静的でタイプセーフなJPAクエリオブジェクトに変換します。このためには、ビルドで静的メタモデル生成が有効になっていることが必要です。詳細については、JPA静的メタモデルジェネレータのドキュメントを参照 してください。
生成されたクライテリアが機能し、Springが適切に構成されていることを証明するために、個々のフィルタごとに1つずつといった多くのテストケースを持つEntityResourceIntTest
が作られます。
Angular
Angularを使用する場合、この便利な機能を利用する適切な方法は、次のようになります。
- Equals(
contains
とnotEquals
にも当てはまります)
this.bookService.query({'title.equals':someValue}).subscribe(...);
- greaterThan(
date
およびnumber
データ型を使用する場合、lessThan
、greaterThanOrEqual
、およびlessThanOrEqual
にも当てはまります)
this.bookService.query({'id.greaterThan':value}).subscribe(...);
this.bookService.query({'birthday.lessThanOrEqual':value}).subscribe(...);
- In(
notIn
にも当てはまります)
this.bookService.query({'id.in':[value1, value2]}).subscribe(...);
- Specified
this.bookService.query({'author.specified':true}).subscribe(...);
制限事項
現在、SQLデータベース(JPAを使用)のみがサポートされており、個別のサービスまたは個別のサービス実装/インタフェースの組み合わせが提供されます。