Во время выполнения вы всегда получите правильный класс. Стирание типа происходит во время компиляции, когда компилятор генерирует байт-код. Когда тип не ограничен, компилятор заменяется на Object, а когда он ограничен, он заменяется верхней границей. Вы можете получить подробную информацию о стирании типов в этом уроке https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html
LazyInitializationException подразумевает вызов набора после того, как быть в спящем режиме сессия закрылась, или после того, как объект был отсоединен от сессии.
необходимо или повторно прикрепить объект быть в спящем режиме сессия, изменить место, где Вы называете набор или перемещаете границу того, где сеанс закрыт к более высокому слою.
OpenSessionInView является одним шаблоном для контакта с этой проблемой. Некоторая информация здесь:
http://www.hibernate.org/43.html
Вы захотите быть осторожными при реализации этого шаблона и понять последствия. Каждый раз, когда Вы перемещаетесь по ленивой ассоциации в представлении, оно исчерпает другой SQL-запрос для загрузки данных. Если Ваши варианты использования таковы, что число и размер этих SQL-запросов являются небольшими затем, это не может иметь значения. Удостоверьтесь, что как минимум Вы корректируете свои настройки входа, таким образом, Вы видите, какие запросы В спящем режиме, "волшебно" выполняется в фоновом режиме, чтобы Вы загрузили данные.
Также рассматривают вид приложения, которое Вы пишете. Если Вы не имеете дело с дистанционной работой (никакие веб-сервисы, никакой ОСНОВАННЫЙ НА AJAX веб-клиент) затем, OSIV может работать очень приятно. Однако, если сериализатор дистанционной работы начнет обходить весь граф объектов, то он, вероятно, инициирует смешное количество SQL-запросов и нанесет вред Вашему серверу БД и серверу приложений.
Существует много способов предварительной выборки свойств , поэтому они присутствуют после закрытия сеанса:
JOIN FETCH
. Некоторые проблемы могут возникнуть, когда вы попробуете следующие решения:
ПРИСОЕДИНЯТЬСЯ к FETCH
, могут быть связаны через несколько отношений типа «многие» с участием List. В этом случае результирующий запрос возвращает неоднозначные результаты, и Hibernate откажется получить ваши данные в одном запросе. Лучше всего сначала попробовать JOIN FETCH
. Если это не сработает, попробуйте метод получения. Если JIT-компилятор ошибся во время выполнения, присвойте результат общедоступному статическому изменчивому объекту
.
Или прекратите использование Hibernate ...