2012-08-03 2 views
-1

Я использую jquery для пользовательского интерфейса, Struts2 как действие, JPA для уровня доступа к данным. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю LazyInitializationException, когда пытаюсь извлечь значения из базы данных. Я получаю ниже StackTrace:JPA LazyInitializationException?

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs, no session or session was closed 

По умолчанию Fetch="LAZY", код работает нормально, когда я изменил тип Fetch к EAGER, я не знаю, что я должен делать дальше. Я застрял посередине.

+1

Есть около десятка вопросов об этом исключении в stackoverflow и многое другое на других сайтах. Вы проверили кого-нибудь из них? – Bozho

+0

@Bozho, так как я не получил решение, чего хочу, так что только я воссоздал тему. его не то, что я не ссылался на какой-либо другой ресурс и размещен здесь, и я вижу много ссылок в правой части экрана, ссылающихся на LazyInitializationException, но никто не помог мне – Esh

ответ

1

Если вы попытаетесь получить доступ к ленивому атрибуту из объекта, JPA пытается снова получить доступ к базе данных для извлечения данных. ваша проблема в том, что в это время вы находитесь за пределами транзакции. существует множество способов расширения транзакции, например. используя openSessionInViewFilter

(Hibernate/Spring: failed to lazily initialize - no session or session was closed)

то, что я лично предпочитаю, чтобы создать объекты передачи, один для каждой страницы, которую вы хотите, чтобы показать, включая только необходимые данные. вам нужно всего лишь отобразить объекты в объекты переноса, например. используя устройство сортировки бульдозера, которое действительно мощное и удобное. таким образом намного проще управлять транзакциями, а во-вторых, вы не используете сущности базы данных в своем интерфейсе, потому что вам не нужно ничего знать о вашем уровне персистентности.

Смежные вопросы