特定のリクエストが現在どのような状態にあるか(たとえば、保留中、承認済み拒否など)を定義するSTATE
フィールド(文字列/テキスト)を含むデータがあり、その列からすべての一意の値を取得できます次のTSQLクエリを実行します
_SELECT DISTINCT STATE FROM CALLOUT_REQUEST
_
ここで、_CALLOUT_REQUEST
_は私のテーブル名であり、STATE
は次のようなものを返すフィールドです。
状態
ただし、「by」ステートメントまたはSTATE
に基づいて取得できるその他のフィルターメカニズムが必要なようであるため、リポジトリでクエリに変換する方法がわかりません。
上記の生のTSQLクエリに示されているように、私が返したいのは、すべてのSTATE
フィールドにすべての一意の/異なる値を含むある種のListまたはArrayオブジェクトです。
したがって、擬似コードでは、次のようなものを探していると思います。
String[] states = repository.findDisinctState();
ここで、findDistinctState()
はソートの配列を返します。
それが理にかなっていることを願っています-私はJavaとSpring全般に非常に慣れていないので、上記を利用するための概念的な知識が不足していると思います。
更新:
'state'の概念は閉じているので、列挙型として実装できます-唯一の問題は、その方法がわからないことです:)達成しようとしていることと完全に一致すると思うので、どのようにそれを行うことができるかを調べます。
提供されたクエリから取得したリストは、すべての発生のカウントを取得するために使用することを目的としています。 '状態'のそれぞれの合計数を取得するために、以前にこのコードを使用しました。
_Map stats = new HashMap();
String[] states = {"approved", "denied", "pending", "deactivated"};
for (int i = 0; i < states.length; i++) {
stats.put(states[i], repository.countByState(states[i]));
}
_
上記のコードスニペットにある状態Array
が列挙型に変換される可能性があり、カスタム_@Query
_も必要ないことを理解しているのは正しいですか?
そのstate
の概念が閉じていて、それが可能な値のセットであることがわかっている場合は、列挙型である必要があります。
その後、次のように呼び出すことができます クエリの作成 :
repository.findByState(State.APPROVED)
列挙型を作成できない場合は、個別の値を取得するための別のメソッドが必要です。これは、CalloutRequest
sのリストではなく文字列のリストが必要なため、JPAでは提供できません。次に、次のように手動でクエリを指定する必要があります。
@Query("SELECT DISTINCT State FROM CALLOUT_REQUEST")
List<String> findDistinctStates();
これには、@org.springframework.data.jpa.repository.Query
アノテーションを付けてJPQLクエリを使用できます。
@Query("select distinct state from CalloutRequest")
List<String> findDistinctStates();