我在餐馆和标签之间建立了很多关系。这是我的课程:
public class Restaurant {
@Id
@GeneratedValue
private int id;
(...)
@ManyToMany
@JoinTable(name="restaurant_tag",
joinColumns={@JoinColumn(name="restaurant_id")},
inverseJoinColumns={@JoinColumn(name="tag_id")})
private List<Tag> tags;
和
public class Tag {
@Id
private int id;
private String name;
@ManyToMany
@JoinTable(name="restaurant_tag",
joinColumns={@JoinColumn(name="tag_id")},
inverseJoinColumns={@JoinColumn(name="restaurant_id")})
private List<Restaurant> restaurants;
我想显示与我的餐厅相关的所有标签。这是控制器:
modelMap.addAttribute("tagList", restaurant.getTags());
在我的jsp中:
<c:forEach items="${tagList }" var="var"><c:out value="${var }" ></c:out></c:forEach>
当我去餐厅页面时,我收到了错误:
org.hibernate.LazyInitializationException: 没有懒惰地初始化一个 角色集合: beans.Restaurant.tags,没有会话或 会议已经结束
答案 0 :(得分:1)
您需要在视图模式中使用开放会话。在web.xml中添加第一件事
<filter>
<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 1 :(得分:0)
这是因为您的DAO在获取集合之前关闭了休眠会话。
看看"Open Session In View" pattern,这是解决此问题的最常见方法。