Spring + Hibernate + Tuckey Urlrewrite = LazyInitializationException - PullRequest
1 голос
/ 03 ноября 2011

Описание домена

Я использую комбинацию
Весна + Спящий режим + Тьюки Урлрюрит
В Spring Framework веб-приложении.

У меня есть простая структура данных
Special имеет 1: много объектов изображения

Я использую язык в URL:
http://site.com/ ru /someview или
http://site.com/ де /someview и т. Д.
Существует также URL-адрес по умолчанию:
http://site.com/

Я использую Tucky Urlrewrite , чтобы переписать URL-адреса с
http://site.com/ ru /someview до
http://site.com/someview?lang=en
чтобы выбрать правильный язык для страницы
( Я делаю это, чтобы позволить пользователю просто изменить язык в URL и соответственно изменить язык сайта )

Я загружаю Специальный объект в контроллер по умолчанию
Я передаю специальный объект для просмотра и загружаю изображения там.

Описание проблемы

При нажатии http://site.com/ все работает как положено. Глядя на журналы для Турции, она НЕ делает какие-либо изменения.

При ударе http://site.com/en/ или http://site.com/de/ я получаю ужас
« не удалось лениво инициализировать коллекцию ролей »

Я могу доказать, что с Tuckey Urlrewrite что-то есть, потому что, когда я ввожу «переписанные» URL-адреса в адресную строку, они работают и даже удаляют Tuckey Urlrewrite все вместе.

Я пробовал следующее

  • Загрузка изображений в контроллер - не сработало
  • Использование OpenEntityManagerInViewInterceptor - не работает
  • Использование диспетчера Tuckey REQUEST / FORWARD - не работает
  • Использование Tuckey type = "redirect" - работало, но, как и ожидалось, перенаправило браузер
  • Использовал атрибут OneToMany fetch = FetchType.EAGER - работал (но в долгосрочной перспективе не желательно)

Я открыт для всех предложений, чтобы удалить использование FetchType.EAGER.

У меня есть несколько идей:
- Другой метод перезаписи URL, т. Е. Если возможно установить tomcat для обработки перезаписи перед DispachFilter - Другой urlrewriter, то есть другой продукт, или внутренний перезаписывающий URL-адрес Spring

сайтов, которые я прочитал

Действительно был бы очень благодарен за любые подсказки

Адам

1 Ответ

1 голос
/ 03 ноября 2011

Если вы используете OpenSessionInViewFilter / OpenEntityManagerInViewFilter, убедитесь, что выполняется одно из следующих условий:

  • <filter-mapping> из Open...InViewFilter объявлено до <filter-mapping> изФильтр Тьюки

  • <filter-mapping> из Open...InViewFilter содержит <dispatcher>FORWARD</dispatcher>.

В противном случае ваш Open...InViewFilter не будет вызван, поскольку фильтр Tuckey выполняет пересылку при перезаписи URL, поэтому фильтры, объявленные после него, должны иметь <dispatcher>FORWARD</dispatcher> для вызова.

...