Спящий вопрос JSTL - PullRequest
       6

Спящий вопрос JSTL

0 голосов
/ 04 февраля 2011

Я следую учебному пособию по спящему режиму, в котором моя база данных имеет отношение между "Персона" и "События"

Между этими двумя отношениями существует много-много. Каждый Person имеет набор событий в Person.class, к которым я могу получить программный доступ с помощью personinstance.getEvents ()

вот что я хочу работать:

Контроллер (отрывок):

List<Person> persons = personManager.getPersons();
    Map<String, Object> myModel = new HashMap<String, Object>();
    myModel.put("persons", persons);

    return new ModelAndView("WEB-INF/jsp/hello.jsp","model",myModel);

страница JSP:

<%@ include file="include.jsp"%>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Persons</h1>
<br />
<c:forEach items="${model.persons}" var="person">
    <c:out value="${person.firstname }" />
    <c:out value="${person.lastname }" />

    <c:forEach items="${person.events }" var="event">
        <c:out value="${event.title }" />
    </c:forEach>

    <br />
</c:forEach>
</html>

ошибка:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: domain.Person.events, no session or session was closed

Я не уверен, правильно ли я делаю это (вложено для каждого цикла с помощью jstl) или могу ли я достичь результата, который я ищу через контроллер или что-то в этом роде. но мне нужен совет

1 Ответ

2 голосов
/ 04 февраля 2011

Есть несколько похожих вопросов здесь на stackoverflow по этому поводу. В качестве дружеского совета, попробуйте найти общую часть исключения, прежде чем открывать новый вопрос. В этом случае «ни один сеанс или сеанс не был закрыт».

Проблема в том, что ваше представление пытается получить доступ к "событиям", которые не были загружены Hibernate при загрузке списка Person. Это называется отложенной загрузкой. Если вы знаете, что вам понадобятся «события» в представлении, вам придется предварительно загрузить его перед отправкой в ​​представление. Это называется энергичной загрузкой. Например, в вашей модели Person ваш @ManyToMany может выглядеть следующим образом:

@ManyToMany(fetch = FetchType.EAGER)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...