2016-07-06 18 views
0

特定のリクエストが現在どの状態にあるかを定義する(例:保留中、承認済み拒否など)STATEフィールド(String/Text)SpringデータJPA Distinct - 単一の列からの結果を返します

STATE

:私は、次のTSQLクエリ

CALLOUT_REQUESTが私のテーブル名で、 STATEのようなものを返すフィールドであること

SELECT DISTINCT STATE FROM CALLOUT_REQUEST

を実行することができ、その列からすべての一意の値

  • 拒否
      承認
    • 私は私が」を必要とするようだと、私は私のリポジトリ内のクエリにそれを回すだろうか理解していないが
    • ...

    を保留私はSTATEに基づいて得ることができますか?

    上記の未処理のTSQLクエリに示されているように、STATEフィールドのすべての一意/個別値を含む何らかの種類のListオブジェクトまたはArrayオブジェクトです。

    ので、擬似コードで私はこのような何かを探していますと思う:findDistinctState()は、その後の種類の配列を返します

    String[] states = repository.findDisinctState();

    希望がある - 私はJavaとSpringの一般性が非常に新しいので、私は上記を利用するための概念的な知識が不足していると思う。

    UPDATE:

    「状態」という概念をので、私は列挙型としてそれを実装することができ閉じている - 唯一の問題は、私は:)病気は私のようにそれを行うことができますどのように見ていることを行う方法を知っていけないですそれが私が達成しようとしているものに完全に合っていると思う。

    提供されたクエリから取得したリストは、すべての出現回数を取得するために使用することを目的としています。私は、「状態」のそれぞれの合計数を取得する前にこのコードを持っていた:

    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が必要ないのですか?

  • 答えて

    1

    あなたのよう呼び出すことcreate queriesあなたができることをした後:あなたが列挙型を作成することができない場合、あなたは、JPAでは提供できない個別の値を取得するために別の方法が必要

    repository.findByState(State.APPROVED) 
    

    CalloutRequestのリストではなく文字列のリストが必要なためです。この答えは同様にそれは私の質問の見出しを答えないよう正しい

    @Query("SELECT DISTINCT State FROM CALLOUT_REQUEST") 
    List<String> findDistinctStates(); 
    
    +0

    ありがとうございます。なぜ私は最初にカスタムクエリを要求したのかと質問を更新しました。返されるDistinct値の数を収集するために使用する必要があることを示しています。 –

    +0

    enumの作成に関する問題は表示されません。可能な値をすべて1つ作成してください:https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 次に、その列挙型の 'CalloutRequest'の下にフィールドを作成します。最後に、@ Enumerated(EnumType.String) http://tomee.apache.org/examples-trunk/jpa-enumerumerated/README.html –

    +0

    これが私の最初のJavaアプリケーションであるという事実が問題です。単にそれを行う方法を知らなかったが、明確化のためにあなたに感謝します。 –

    2

    あなたは@org.springframework.data.jpa.repository.Queryアノテーションで、このためにJPQLクエリを使用することができます。その「状態」という概念が閉じて、あなたはその値の可能なセットを知っている場合は、それが列挙型でなければなりません

    @Query("select distinct state from CalloutRequest") 
    List<String> findDistinctStates(); 
    
    +0

    : は、その後、あなたは次のように手動でクエリを指定する必要があります。私が@ Luis Soaresをマークする理由は、彼がソリューションを拡張し、enumのアプローチについてのガイダンスを提供したという事実のためだけです。 –

    関連する問題