| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > EntityManager - от куда куча лишних запросов к БД? |
| Автор: zimzum 26.7.2011, 13:14 | ||||||
| Доброго всем дня! Начал изучать EJB3 (сервер - JBossAS6, БД - MSSQL). Столкнулся с такой проблемой: (сначала в кратце опишу) Есть несколько связанных между собою таблиц. Делаю выборку данных из них с помощью EntityManager`а. Смотрю запросы к БД через SQL Server Profiler: первый запрос - то что мне надо, далее - куча лишних запросов к БД по ForeignKey. (теперь подробнее) Есть у меня несколько Entity, которые связаны между собой связями @ManyToOne и @OneToOne. (пробовал и fetch=FetchType.EAGER и fetch=FetchType.LAZY - один результат) Делаю примерно такой запрос:
реальный код приводить не хочу, т.к. это будет огромная простыня кода суть в том - что нужно выбрать данные из связанных таблиц по какому-то условию в итоге, что я вижу в SQL Server Profiler: 1 запрос к БД (упрощенно привожу):
и далее (!!!!
т.е. выбираются ПО ОДНОЙ записи из связанной таблице, ID которых вернулись мне в первом запросе! в документации я нашел слово FETCH которое должно решать данную проблему, но у меня на простых запросах (и связях таблиц) оно работает, а на сложных уже нет :( явно чего-то я не учитываю и делаю не так... может плохо объяснил проблему, но надеюсь меня поймут те, кто уже сталкивался с таким явлением и подскажут мне что я делаю не так? |
| Автор: zimzum 26.7.2011, 14:00 |
| Так... Методом тыка удалось добиться нужной работы EntityManager`a! Оказалось, что по умолчанию для всех @ManyToOne и @OneToOne стоит fetch=FetchType.EAGER и он то всё и гадит! Надо повнимательнее почитать мануал на этот счет... Делаем: 1. fetch=FetchType.LAZY для всех связей 2. в select присоединяем все нужные нам таблицы используя ключевое слово FETCH в моем случае достаточно было сделать п.1 (т.к. по п.2 уже всё было сделано) и всё заработало! P.S.: полезно проблему описывать словами! При этом лучше понимаешь суть вопроса и приходят новые идеи! |