2016-11-02 8 views
0

私は基準でHibernateを使用しています。Hibernateのコレクションから単一の結果を取得するためにフェッチモードを設定するには?

私はこのように定義されたJavaモデルを持っています。

@Entity 
@Table(name = "questionask", uniqueConstraints = @UniqueConstraint(columnNames = "code")) 
public class QuestionAsk extends LobEntity implements Comparable<Object> { 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "questionAsk") 
    private List<Answer> answerList = new Arraylist<Answer>(0); 

//getters and settes 

.. 
} 

フェッチされたデータで回答リストを取得する場合は、次のように設定します。

criteria.setFetchMode(property, FetchMode.JOIN); //This works . 

しかし、私の要件は、ユーザーの要求に応じて、コレクションからいくつかのレコードを取得することです。それは私がその一つの答えをanswerListを取得したいと思います

answerList.code=an_123 

(answerListでそれぞれの答えはcode属性を持つ)、ユーザーは次のクエリを提供する場合、です。しかし、私にはうまくいかない。 (つまり、遅延ロードと定義したanswerListをフェッチしていないことを意味します)

私はこのように試しています。 criteria.setFetchMode(answerList、FetchMode.JOIN);その他はjoinsinsが必要です。

どのようにすれば基準でこれを行うことができますか? Hibernateはこれをサポートしていますか?

答えて

0

あなたが望むユースケースは、休止状態ではサポートされていないと思います。

なぜあなたはあなたが望むAnswerを取得するためにクエリを実行し、それにQuestionAskをリンクさせますか?

このクエリの結果をMap<QuestionAsk, Set<Answer>>に集約することもできます。この方法ではあいまいさはありません:mapEntry.getKey().getAnswerList()は、質問のすべての回答を期待どおりに返し、mapEntry.getValue()は回答を返します。

関連する問題