休眠关系jstl问题

时间:2011-02-04 02:57:29

标签: hibernate jsp spring-mvc jstl

我正在遵循一个hibernate教程,其中我的数据库与“人”和“事件”之间存在关系

两者之间存在多对多的关系。每个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 个答案:

答案 0 :(得分:2)

这里有关于stackoverflow的几个类似的问题。作为一个友好的建议,尝试在打开新问题之前搜索异常的一般部分。在这种情况下,“没有会话或会话被关闭”。

问题是你的视图正在尝试访问“事件”,Hibernate在加载Person列表时没有加载它。这称为延迟加载。如果您知道视图中需要“事件”,则必须在调度到视图之前预先加载它。这称为急切加载。例如,在您的Person模型中,您的@ManyToMany可能如下所示:

@ManyToMany(fetch = FetchType.EAGER)