«типо» имеет один «Profissão:»Лучше решение, чтобы избежать «org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет Session» в модели Ленивый
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_profissao", nullable = false)
public Profissao getProfissao() {
return profissao;
}
Когда я попытался в DataTable просмотреть данные это отношение лица типо и Profissao связанные:
<p:dataTable var="lista" value="#{tipoBean.tipos}" id="tabelaTipos"
rows="10" paginator="true" widgetVar="tabelaTipos">
<p:column headerText="Profissão">
<h:outputText value="#{lista.profissao.nome}" />
</p:dataTable>
DAO:
Criteria cri = session.createCriteria(Tipo.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("nome"));
return cri.list();
Я получил эту ошибку ш idely обсуждается здесь: org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет Сессия
Итак, я реализовал это с использованием метода «Hibernate.initialize».
Criteria cri = session.createCriteria(Tipo.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("nome"));
List<Tipo> tipos = (List<Tipo>) cri.list();
for (Tipo t :tipos) {
Hibernate.initialize(t.getProfissao());
}
Это сработало, но есть лучшее решение для этого? Я не хочу использовать решение Eager. Любые решения?
Спасибо!
Попробуйте использовать 'session.setFetchMode (« profissao », FetchMode.JOIN); и дайте мне знать – geoand
@geoand это сработало, но использование этого не такое же, как для таких отношений, как EAGER? Когда я попытался применить это решение, в котором у одного элемента есть множество сущностей, я получаю эту ошибку: org.hibernate.loader.MultipleBagFetchException: не может одновременно извлекать несколько пакетов. – gustavomr
Это не то же самое, что использовать с нетерпением. Он сообщает hibernate построить запрос соединения, а не использовать дополнительные запросы, которые требуют усилий. Но да, что вы упомянули с несколькими отношениями, не работают – geoand