JSON ошибка весной - PullRequest
       11

JSON ошибка весной

2 голосов
/ 26 июля 2011

Я пробовал это:

@RequestMapping(method = RequestMethod.GET, value = "/getmainsubjects")
@ResponseBody
public JSONArray getMainSubjects( @RequestParam("id") int id) {

List <Mainsubjects> mains = database.getMainSubjects(id, Localization.getLanguage());
JSONArray json = JSONArray.fromObject(mains);
return json;

}

При вызове getmainsubjects.html? Id = 1 я получаю сообщение об ошибке:

net.sf.json.JSONException: org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию ролей: fi.utu.tuha.domain.Mainsubjects.aiForms, ни один сеанс или сеанс не был закрыт

Как исправить?

1 Ответ

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

Проблема в том, что у объекта модели Mainsubjects были некоторые ассоциации (построенные OneToMany, ManyToOne и т. Д.), Списки (PersistentBags), Sets или что-то подобное (Collection), которые инициализируются лениво.Это означает, что после инициализации набора результатов Mainsubjects не указывает на фактический объект коллекции, а только на прокси.При рендеринге, обращаясь к этим коллекциям, hibernate пытается получить значения из базы данных, используя прокси.Но на данный момент нет открытой сессии.По этой причине вы получаете это исключение.

Вы можете установить стратегию извлечения на EAGER (если вы используете аннотации), например: @OneToMany (fetch = FetchType.EAGER)

В этом методе вы должны знать, что вы можетене позволяйте более чем одному PersistentBag инициализироваться с нетерпением.

или вы можете использовать шаблон OpenSessionInView, который представляет собой фильтр сервлета, который открывает новый сеанс до того, как ваш запрос обработан контроллером, и закрывается до того, как ваше веб-приложение ответит:*

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