Skip to main content

エンティティのフィルタリング

導入

基本的なCRUD機能がエンティティに実装された後、エンティティの属性に対してさまざまなフィルタを作成したいという、非常に一般的な要求があります。 これにより、サーバをより効果的に使用できるようになります。これらのフィルタは、すべてのクライアント(およびすべてのブラウザ)がそれを使用できるように、リクエストパラメータとして送信される必要があります。 さらに、これらのフィルタは、合理的で簡潔なパターンに従う必要があり、自由に組み合わせることができなければなりません。

アクティブにする方法

注意filterreactiveと互換性がありません。 jhipster entityコマンドを使用してエンティティを生成する際に、サービスまたはサービス実装を選択して、このエンティティのフィルタリングを有効にします。

既存のエンティティのフィルタを有効にする場合は、プロジェクトの.jhipsterディレクトリでエンティティ構成を変更します。変更するには、serviceserviceClassに、またはserviceImplnoとし、jpaMetamodelFilteringtrueに設定して、jhipster entity <エンティティ名>で再生成します。

JDLを使用する場合は、JDLファイルに行filter <エンティティ名>を追加し、jhipster jdlコマンドを使用して定義を再インポートします。

パブリック・インタフェース

エンティティごとに、エンティティジェネレータでフィルタリングを有効にできます。その後、次のパラメータを使用して/api/my-entityGETエンドポイントを呼び出すことができます。

  • xyzフィールド用
    • xyz.equals=someValue
      • xyzが'someValue'な、すべてのエンティティをリストします。
    • xyz.in=someValue,otherValue
      • xyzが'someValue'または'otherValue'な、すべてのエンティティをリストします。
    • xyz.specified=true
      • xyzはNULLではない、すべてのエンティティをリストします。
    • xyz.specified=false
      • xyzはNULLまたは未指定となる、すべてのエンティティをリストします。
  • xyzのタイプが文字列の場合
    • xyz.contains=something
      • xyzに'something'が含まれる、すべてのエンティティをリストします。
  • xyzが数値型または日付型のいずれかである場合
    • xyz.greaterThan=someValue
      • xyzが'someValue'より大きくなる、すべてのエンティティをリストします。
    • xyz.lessThan=someValue
      • xyzが'someValue'より小さくなる、すべてのエンティティをリストします。
    • xyz.greaterThanOrEqual=someValue
      • xyzが'someValue'以上となる、すべてのエンティティをリストします。
    • xyz.lessThanOrEqual=someValue
      • xyzが'someValue'以下となる、すべてのエンティティをリストします。

これらは自由に組み合わせられます。

このフィルターAPIの表現力を体験する良い方法は、JHipsterアプリケーションのAPIドキュメント・ページにあるswagger-uiから使用することです。

実装

この機能を有効にすると、EntityQueryServiceという名前の新しいサービスとEntityCriteriaが生成されます。SpringはリクエストパラメータをEntityCriteriaクラスのフィールドに変換します。

EntityQueryServiceでは、クライテリアオブジェクトを静的でタイプセーフなJPAクエリオブジェクトに変換します。このためには、ビルドで静的メタモデル生成が有効になっていることが必要です。詳細については、JPA静的メタモデルジェネレータのドキュメントを参照してください。

生成されたクライテリアが機能し、Springが適切に構成されていることを証明するために、個々のフィルタごとに1つずつといった多くのテストケースを持つEntityResourceIntTestが作られます。

Angular

Angularを使用する場合、この便利な機能を利用する適切な方法は、次のようになります。

  • Equals(containsnotEqualsにも当てはまります)
this.bookService.query({'title.equals':someValue}).subscribe(...);
  • greaterThan(dateおよびnumberデータ型を使用する場合、lessThangreaterThanOrEqual、および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を使用)のみがサポートされており、個別のサービスまたは個別のサービス実装/インタフェースの組み合わせが提供されます。