Hibernate 4 и улучшения в отношении отложенной загрузки при использовании JPA + Spring - PullRequest
1 голос
/ 14 декабря 2011

Дает ли Hibernate 4 какие-либо улучшения в отношении отложенной загрузки?

Мы используем Hibernate в качестве поставщика JPA и хотим, чтобы наш код был чистым от специфических для hibernate вещей. Мы не хотим использовать сессионные объекты Hibernate. В нашем приложении мы также используем Spring и JSF. Мы выяснили, что есть OpenSessionInViewFilter и OpenSessionInViewInterceptor, но оба, похоже, работают, только когда бины находятся в области запроса. Перехват области сеанса Spring (@Scope("session")), похоже, не работает.

Другие структуры позволяют weaving или enhancement бобов. Возможно ли что-то подобное сейчас с Hibernate 4 или где представлены другие новые функции, которые позволяют коду оставаться свободным от определенных расширений hibernate? (Некоторые конфигурации, конечно, в порядке.)

Я уже проверил Что нового в Hibernate 4? и увидел, что они работают на фабрике сеансов, однако я не понял, помогает это или нет.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2011

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

Используете ли вы расширенные постоянные константы?

0 голосов
/ 12 января 2012

Похоже, что в hibernate 4 нет улучшений в отношении LazyLoading для других областей, кроме области запроса.

0 голосов
/ 14 декабря 2011

Hibernate - это реализация JPA. Просто используйте его только с использованием API JPA, и вы будете свободны от кода, специфичного для Hibernate. Даже при непосредственном использовании Hibernate API ленивая загрузка настраивается с использованием аннотаций JPA. Для использования отложенной загрузки с Hibernate вам не нужны специфичные для Hibernate аннотации.

Фильтр / перехватчик OpenSessionInView напрямую не связан с отложенной загрузкой. Это позволяет просто открыть сеанс даже после завершения транзакции. В любом случае, этот фильтр / перехватчик не заставляет вас иметь какой-либо специфичный для Hibernate код в ваших собственных классах, поэтому я не совсем понимаю, в чем проблема.

Обратите внимание, что Spring также поддерживает JPA (а Hibernate является механизмом JPA) и имеет OpenEntityManagerInViewFilter / Interceptor, который играет ту же роль, что и перехватчик OpenSessionInViewFilter /, но для JPA.

...