2011-07-10 71 views
0

我在餐厅和标签之间得到了很多关系。这里是我的课:Spring MVC加载多对多关系

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: failed to lazily initialize a collection of role: beans.Restaurant.tags, no session or session was closed

+0

我已经在另一个问题中告诉过你,但你可能没有注意到:你的映射是错误的。相同的双向关联被映射两次。其中一方应该使用mappedBy属性。 –

回答

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> 
+0

然后我得到了:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为'entityManagerFactory'的bean – zax