2011-07-10 8 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; 

私はレストランに接続されたすべてのタグを表示したいです。私のJSPで

modelMap.addAttribute("tagList", restaurant.getTags()); 

::私はレストランのページに行くと、私はエラーを得

<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

すでに別の質問でお伝えしましたが、おそらく気づかなかったでしょう:マッピングが間違っています。同じ双方向関連が2回マップされます。サイドの1つはmappedBy属性を使用する必要があります。 –

答えて

0

あなたのDAOは前に休止状態のセッションを閉じているため、この問題が発生しましたコレクションをフェッチできます。

"Open Session In View" patternをご覧ください。これはこの問題の最も一般的な解決方法です。

1

ビューパターンでオープンセッションを使用する必要があります。あなたのweb.xmlに最初のものを追加してください。

+0

私は得ました:org.springframework.beans.factory.NoSuchBeanDefinitionException: 'entityManagerFactory'という名前のBeanは定義されていません – zax