如何解决“无法延迟初始化角色集合”的Hibernate异常

我有这个问题:

org.hibernate.LazyInitializationException:无法延迟初始化角色集合:mvc3.model.Topic.comments,没有会话或会话被关闭

这是模型:

@Entity

@Table(name = "T_TOPIC")

public class Topic {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int id;

@ManyToOne

@JoinColumn(name="USER_ID")

private User author;

@Enumerated(EnumType.STRING)

private Tag topicTag;

private String name;

private String text;

@OneToMany(mappedBy = "topic", cascade = CascadeType.ALL)

private Collection<Comment> comments = new LinkedHashSet<Comment>();

...

public Collection<Comment> getComments() {

return comments;

}

}

调用模型的控制器如下所示:

@Controller

@RequestMapping(value = "/topic")

public class TopicController {

@Autowired

private TopicService service;

private static final Logger logger = LoggerFactory.getLogger(TopicController.class);

@RequestMapping(value = "/details/{topicId}", method = RequestMethod.GET)

public ModelAndView details(@PathVariable(value="topicId") int id)

{

Topic topicById = service.findTopicByID(id);

Collection<Comment> commentList = topicById.getComments();

Hashtable modelData = new Hashtable();

modelData.put("topic", topicById);

modelData.put("commentList", commentList);

return new ModelAndView("/topic/details", modelData);

}

}

jsp页看起来如下所示:

<%@page import="com.epam.mvc3.helpers.Utils"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page session="false" %>

<html>

<head>

<title>View Topic</title>

</head>

<body>

<ul>

<c:forEach items="${commentList}" var="item">

<jsp:useBean id="item" type="mvc3.model.Comment"/>

<li>${item.getText()}</li>

</c:forEach>

</ul>

</body>

</html>

查看jsp时会引发异常。与c:forEach循环一致

回答:

如果你知道Comment每次检索a时都希望看到全部,Topic则将字段映射更改为comments

@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL)

private Collection<Comment> comments = new LinkedHashSet<Comment>();

默认情况下,集合是延迟加载的。

以上是 如何解决“无法延迟初始化角色集合”的Hibernate异常 的全部内容, 来源链接: utcz.com/qa/419460.html

回到顶部