![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ixyon |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 5.9.2009 Репутация: нет Всего: нет |
Нужен совет по стратегии использования lazy loading.
Я использую Spring, Struts 2 и Hibernate JPA. В модели достаточно много OneToMany и ManyToMany связей и логично использовать lazy loading. Очень удобно в Struts Actions используя OpenEntityManagerInViewFilter доставать данные таким образом:
Но чтобы избежать LazyLoadException приходится использовать:
К сожалению, EntityManager в этом случае становится не thread-safe, соответственно документации Spring: "Extended EntityManagers are not thread-safe, hence they must not be used in concurrently accessed beans (which Spring-managed singletons usually are)." EXTENDED означает, что EntityManager становится общим в пользовательской сессии, а мой EntityManager внедряется как раз в singleton сервисы. Пришёл к этому, когда несколько раз быстро обновлял страницу, которая инициировала несколько селектов и получал:
Какое лучшее решение в данной ситуации исходя из вашей практики: 1. Пытаться самому синхронизировать доступ к EntityManager в пользовательской сессии или ставить запросы каждого пользователя к БД в очередь (наверное, это изврат). 2. Использовать HQL запросы с join fetch, чтобы предварительно загрузить все данные для доступа вне транзакции (возможно, избыточно). 3. Или что-то другое??? И зачем нужен EXTENDED контекст, если он такой ненадёжный?? Спасибо за помощь! |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |