Spring MVC нагружает многие отношения многими - PullRequest
0 голосов
/ 10 июля 2011

У меня много отношений между рестораном и тэгом.Вот мои уроки:

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, ни один сеанс или сеанс не был закрыт

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Вам необходимо использовать открытую сессию в виде шаблона. Добавьте первое в свой файл 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 голосов
/ 10 июля 2011

Это происходит из-за того, что DAO закрывает сеанс гибернации до того, как коллекция может быть получена.

Посмотрите на шаблон «Открыть сеанс в представлении» , это наиболее распространенное решение этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...