Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA lazy collection / 2 сообщений из 2, страница 1 из 1
25.03.2015, 10:15
    #38916017
danatriel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA lazy collection
Всем доброго дня. Возникла проблемка с ленивой загрузкой коллекций.
В общем, есть коллекции в сущности :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trip")
    private List<TripType> tripTypeCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "tripId")
    private List<Showplace> showplaceCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trip")
    @JsonManagedReference
    private List<TripDetails> tripDetailsCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "trip")
    private List<TripCategory> tripCategoryCollection;



Есть фасад, который загружает данные и передает их в rest сервис
Код: java
1.
2.
3.
4.
5.
            String sql="SELECT t FROM Trip t, IN(t.tripDetailsCollection) td  WHERE  td.tripDetailsPK.langId=:langId AND t.isActive=true "+orderExpression;
            TypedQuery<Trip> query = em.createQuery(
                    sql, Trip.class)
                    .setParameter("langId", langId);
            List<Trip> resultList = query.getResultList();



а rest сервис перегоняет полученный список в json

Код: java
1.
2.
3.
4.
            List<Trip> findAllByLang = tripFacade.findAllByLang(langId,order);
            
            ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
            String json = ow.writeValueAsString(findAllByLang);



так вот. Пока работаю с объектом в фасаде, ленивые коллекции нормально подгружаются, а вот когда в рест сервисе пытаюсь перегнать в json вылетает ошибка ленивой инициализации коллекций (сессия то закрыта уже), если в сущности на коллекции ставлю
Код: java
1.
Fetch.EAGER

, то вылетает другая ошибка, что EAGER можно загружать только одну коллекцию.

Как быть? Как лучше решить эту проблему?
...
Рейтинг: 0 / 0
25.03.2015, 10:48
    #38916091
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA lazy collection
danatrielЕсть фасад, который загружает данные и передает их в rest сервис

"Фасад" и "загружает данные" - странная парочка.

danatrielтак вот. Пока работаю с объектом в фасаде, ленивые коллекции нормально подгружаются, а вот когда в рест сервисе пытаюсь перегнать в json вылетает ошибка ленивой инициализации коллекций (сессия то закрыта уже)

Google -> Open Session In View. Есть вариант расширить scope сессии до окончания формирования отклика.

danatriel, если в сущности на коллекции ставлю Fetch.EAGER то вылетает другая ошибка , что EAGER можно загружать только одну коллекцию.

Ошибки хорошо бы приводить. А не самостоятельно "угадывать" что она обозначает.
Вероятно она связана с тем что у вас не сортированные коллекции. Если ORM будет делать JOIN сразу их всех то возникнет неопределенность.

danatrielКак быть? Как лучше решить эту проблему?
- Указать в маппинге что коллекции упорядочены.
- Использовать Fetch Eager через SELECT вместо JOIN
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA lazy collection / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]