2011-07-10 100 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