Specification-検索の詳細オプション


詳細オプション機能を実現するには、複数のオプション選択のDBクエリが必要です.この場合,JPAを用いてクエリーごとに作成・メンテナンスする管理ポイントが多く,コードもきれいではない.Googleを通じて、JPA Specificationを使って詳細なオプションを実現すればいいです.これにより、コードを直感的に読むことができ、重複したクエリーを作成することができるので、混同されません.
  • リポジトリにextends JpaSpecificationExecutorを追加します.
  • とModelName Specificationクラスを生成します.
  • クラスでは、詳細オプションに基づいて各クエリーspecが作成されます.
    次の例のように、詳細なspecを作成します.
    private static Specification<TestModelName> testIdEquals(Long testId) {
    	return (root, query, builder) ->
    	builder.equal(root.get("testId"), momentId);
    		}

  • 次に、特定のオプションに基づいて複数の選択を行い、前に作成した仕様を組み合わせます.「.and」や「.or」など、上記で作成したオプション固有の仕様を使用して、必要な統合(?)を取得します.specを作成します.
      public static Specification<TestModelName> findtestIdByModifiedAt(TestForm testForm) {
    		Specification<TestModelName> testIdSpec =  testIdEquals(testForm.getContents().getValue());
    			Specification<TestModelName> modifiedSepc = modifiedDataBetween(testForm.getTimeRange().getFromDate(),testForm.getTimeRange().getToDate());
    			Specification<TestModelName> enableDataSpec =  enabledFlagEquals();
    			return Specification.where(modifiedSepc).and(enableDataSpec).and(testIdSpec);
    		}