Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JPA выбрать все одним запросом


Автор: endryha 8.2.2010, 16:21
Всем привет.

Использую JPA и TopLink как ORM. 

Вопрос в том как выбрать записи из таблицы одним запросом. 

Первый вариант.

Код

em.find("SELECT c FROM Country c");


В данном случае запросов делается столько сколько записей в таблице.

Второй вариант через sql
Код

em.createNativeQuery("SELECT * FROM TBL_COUNTRY", Country.class);


В данном случае сначала делается запрос "SELECT * FROM TBL_COUNTRY" а потом еще столько же сколько записей в базе

В обеих предыдущих случаях мне возвращается уже типизированная коллекция List<Сountry>.

Третий вариант
Код

em.createNativeQuery("SELECT * FROM TBL_COUNTRY");


В этом случае делается один запрос в базу и достаются все записи но в таком случае мне возвращается коллекция векторов List<Vector>.

Вопрос в том как грамотно выбрать все записи из базы одним запросом при этом получив типизированную коллекцию обьектов List<Country>.

Заранее спасибо!

И еще забыл дописать, в первых двух случаях мы получаем сущности уже приаттаченые к персистенс контексту а в послденем нет.

Автор: Joss 9.2.2010, 14:30
Насколько я знаю, это сработает как нужно.
Код

Query q = em.createQuery("SELECT c FROM Country c");
List<Country> countries = q.getResultList() 


Автор: endryha 10.2.2010, 16:46
Да ты прав, вся проблема в том что у меня Странна может иметь перента (другую страну регион) а в результате для каждой сущность еще выбираеться её перент. Поетому возможно и получаеться что еще делаеться запросов столько сколько записей достаеться....

Автор: Joss 11.2.2010, 16:05
По-моему, можно сделать вот так:
Код

em.createNativeQuery("SELECT c FROM Country c JOIN FETCH c.parent");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)