![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
zimzum |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.7.2011 Репутация: 1 Всего: 1 |
Доброго всем дня!
Начал изучать EJB3 (сервер - JBossAS6, БД - MSSQL). Столкнулся с такой проблемой: (сначала в кратце опишу) Есть несколько связанных между собою таблиц. Делаю выборку данных из них с помощью EntityManager`а. Смотрю запросы к БД через SQL Server Profiler: первый запрос - то что мне надо, далее - куча лишних запросов к БД по ForeignKey. (теперь подробнее) Есть у меня несколько Entity, которые связаны между собой связями @ManyToOne и @OneToOne. (пробовал и fetch=FetchType.EAGER и fetch=FetchType.LAZY - один результат) Делаю примерно такой запрос:
реальный код приводить не хочу, т.к. это будет огромная простыня кода суть в том - что нужно выбрать данные из связанных таблиц по какому-то условию в итоге, что я вижу в SQL Server Profiler: 1 запрос к БД (упрощенно привожу):
и далее (!!!! ![]()
т.е. выбираются ПО ОДНОЙ записи из связанной таблице, ID которых вернулись мне в первом запросе! в документации я нашел слово FETCH которое должно решать данную проблему, но у меня на простых запросах (и связях таблиц) оно работает, а на сложных уже нет :( явно чего-то я не учитываю и делаю не так... может плохо объяснил проблему, но надеюсь меня поймут те, кто уже сталкивался с таким явлением и подскажут мне что я делаю не так? ![]() |
||||||
|
|||||||
zimzum |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.7.2011 Репутация: 1 Всего: 1 |
Так...
Методом тыка удалось добиться нужной работы EntityManager`a! ![]() ![]() Оказалось, что по умолчанию для всех @ManyToOne и @OneToOne стоит fetch=FetchType.EAGER и он то всё и гадит! Надо повнимательнее почитать мануал на этот счет... Делаем: 1. fetch=FetchType.LAZY для всех связей 2. в select присоединяем все нужные нам таблицы используя ключевое слово FETCH в моем случае достаточно было сделать п.1 (т.к. по п.2 уже всё было сделано) и всё заработало! ![]() P.S.: полезно проблему описывать словами! При этом лучше понимаешь суть вопроса и приходят новые идеи! ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |