2016-11-02 3 views
0

나는 조건을 가지고 최대 절전 모드를 사용하고있다.Hibernate에서 콜렉션으로부터 하나의 결과를 얻기 위해 패치 모드를 설정하는 방법은 무엇입니까?

나는 이와 같이 정의 된 자바 모델을 가지고있다;

@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에서 각각의 대답은 code 속성이)

answerList.code=an_123 

, 쿼리 다음 제공 내가 그 하나의 대답과 함께 answerList를 검색하고자 할 때 즉,. 그러나 그것은 나에게 효과가 없습니다. (즉, 지연로드로 정의한 answerList를 가져 오지 못함을 의미합니다.) criteria.setFetchMode (answerList, FetchMode.JOIN); 기타는 joinsins이 필요합니다.

기준으로 어떻게 할 수 있습니까? Hibernate는 이것을 지원합니까?

답변

0

최대 절전 모드에서 원하는 유스 케이스가 지원되지 않는다고 생각합니다.

가입을 변환하지 않는 이유는 무엇입니까? Answer을 원하는 쿼리로 가져오고 QuestionAsk을 연결하면 어떻습니까?

이 쿼리의 결과를 Map<QuestionAsk, Set<Answer>>에 집계 할 수도 있습니다. 이렇게하면 모호성이 없습니다. mapEntry.getKey().getAnswerList()은 질문의 모든 대답을 예상대로 반환하고 mapEntry.getValue()은 대답을 필터링하여 반환합니다.