2016-11-02 1 views
0

Я использую 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 каждый ответ имеет code атрибут)

answerList.code=an_123 

Я хотел бы, чтобы получить answerList с этим единственным ответом. Но это не работает для меня. (означает, что он не запрашивает список ответов, который я определил как ленивый Загрузка)

Я пробую, criteria.setFetchMode (answerList, FetchMode.JOIN); с другими необходимыми joins и ins.

Как я могу это сделать с помощью критериев? Поддерживает ли Hibernate это?

ответ

0

Я не думаю, что используемый вами вариант поддерживается спящим режимом.

Почему бы не инвертировать соединение, которое вы выполняете: выполнив запрос, чтобы получить нужный вам Answer, а затем связанный с ним связанный с ним QuestionAsk?

Вы можете даже агрегировать результат этого запроса в Map<QuestionAsk, Set<Answer>>. Таким образом, не будет никакой двусмысленности: mapEntry.getKey().getAnswerList() вернет все ответы на вопрос, как и ожидалось, и mapEntry.getValue() вернет ответы, отфильтрованные.

Смежные вопросы