【问题标题】:hibernate relationship jstl question休眠关系jstl问题
【发布时间】:2011-02-04 02:57:29
【问题描述】:

我正在关注一个休眠教程,其中我的数据库在“人员”和“事件”之间存在关系

两者之间存在多对多的关系。每个 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 为每个循环嵌套),或者我是否可以通过控制器或其他方式实现我正在寻找的结果。但我需要一些建议

【问题讨论】:

    标签: hibernate jsp spring-mvc jstl


    【解决方案1】:

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

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

    @ManyToMany(fetch = FetchType.EAGER)
    

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 2019-05-09
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多