Я использую Hibernate в последнее время и нужен, чтобы отобразить темы, которые имеют комментарии, как его внешний ключ (@OneToMany) следующие образом:Список Hibernate без Ленивого объекта
Topic.class
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "topic")
public Set<Comment> getComments() {
return this.communityComments;
}
...
Я использую Hibernate Tools чтобы Generat на объекты DAO, который содержит:
public List findByExample(Topic instance) {
try {
List results = sessionFactory.getCurrentSession()
.createCriteria("com.some.models.Topic").add(Example.create(instance))
.list();
return results;
} catch (RuntimeException re) {
throw re;
}
}
Когда я получаю темы, используя findByExample
, набор тем, будут возвращены. Проблема в том, что как я могу повторить набор? Когда я делаю следующий код:
Set<Topic> oriList = topicDAO.findByExample(OneExample);
Iterator<Topic> it = oriList.iterator();
Он показал исключение «без сеанса». Причина в том, что я думаю, oriList.iterator()
попытался получить доступ к ленивому объекту - комментарии.
Есть ли способ решить эту проблему с минимальными изменениями?
Или можно каким-либо образом установить все комментарии к null
без использования итератора?
минимальные изменения будут, чтобы сделать их не лень ... 'FetchType.EAGER' – Coderchu
есть отличный блог по этому конкретному вопросу, вы можете посмотреть на него здесь HTTP: //javarevisited.blogspot. in/2014/04/orghibernatelazyinitializationException-Could-not-initialize-proxy-no-session-hibernate-java.html В нем обсуждается как простое, так и оптимальное решение – Vihar
Вы также можете настроить режим выборки для сбора комментариев в запросе критериев setFetchMode ("communityComments", FetchMode.EAGER). Это будет отменять ленивую выборку в запросе критериев. – akki