2016-01-16 4 views
-1

У меня есть пользовательский объект с Set cars (oneToMany). Также у меня есть метод:Весна Данные JPA ленивые выборки с коллекциями

@Transactional(readOnly = true) 
public Optional<User> getUserWithCars(Long id) { 
    return userRepository.findOneById(id).map(u -> { 
     u.getCars().size(); 
     return u; 
    }); 
} 

Lazy fetchching отлично работает. Но что, если мне нужно забрать множество пользователей с автомобилями? Я пытался использовать users.forEach (u -> u.getCars(). Size()); но получил популярный no Session исключение.

P.S. Мне нужна ленивая добыча, а не нетерпеливость.

+1

Это звучит как разумное место, чтобы просто написать запрос который возвращает счетчик с сервера, а не вызывает много раундов, когда вы знаете, чего хотите раньше времени. – chrylis

+0

Я не понимаю, что вы имеете в виду. Я должен создать метод, который извлекает всех пользователей с кошками из db, а затем возвращает их. Мне нужно, чтобы он использовался в контроллерах. – Feeco

ответ

0

в JPA весной данных вы можете написать метод запроса

Optional<User> findFirstWithCarsById(Long id); 

для получения дополнительной информации смотрите на documentation

+0

Мне нужно было запросить коллекцию пользователей, а не одного пользователя. Однако вопрос решен. – Feeco

+0

@Feeco это также возможно Список findWithCarsById (Long id); Я пишу это, потому что у кого-то еще может быть эта проблема – roki

0

В хранилище:

@Query("SELECT u FROM User u LEFT JOIN FETCH u.cars") 
public Set<User> getUserWithCars() 
+0

Мой метод для извлечения одного пользователя также работает. Мне нужен способ получить набор с автомобилями. – Feeco

+0

Я обновил свой ответ. Надеюсь, он объяснит, но я не уверен, что я правильно вас устроил. –

+0

Например, у меня есть 2 пользователя в моей базе данных. У каждого пользователя есть 2 машины. Мне нужен метод, который приносит 2 пользователям с их автомобилями. Метод возвращает набор с двумя пользователями, каждый из которых имеет набор автомобилей (в нашем случае - 2 машины для каждого пользователя). – Feeco

Смежные вопросы