У меня следующая проблема с выполнением довольно простого запроса с помощью querydsl.Представьте, что у нас есть две сущности:
CAR ----
Я хотел бы выполнить запрос, который возвращает все автомобили и выбирает всех его владельцев, которые сопоставлены лениво.Другими словами, я хотел бы получить те, которые будут использоваться за пределами транзакции.
Мой запрос выглядит так:
List<Car> cars = new JPAQuery<Car>(em)
.select(car).from(car)
.leftJoin(car.owners, owner)
.where(car.make.eq(make))
.orderBy(new OrderSpecifier<>(Order.ASC, car.id))
.distinct()
.fetch();
Аналогичный запрос работал в QueryDSL 3 нормально, но после обновления до 4Я получаю LazyInitializationException, что означает, что «владельцы» не выбираются должным образом.Не могли бы вы пролить свет на то, как решить эту проблему?
Например, когда я пишу этот запрос вручную, он работает совершенно нормально:
List<Car> cars = em.createQuery(
"SELECT DISTINCT c FROM Car c LEFT JOIN FETCH c.owners WHERE c.make = :make ORDER BY c.id ASC")
.setParameter("make", make).getResultList();
Я использую spring-boot 2 с querydsl4.1.4
Кстати, запрос, который работал нормально в querydsl 3
List<Car> car = new JPAQuery(em)
.from(car)
.leftJoin(car.owners)
.fetch()
.distinct()
.where(car.make.eq(make))
.orderBy(new OrderSpecifier<>(Order.ASC, car.id))
.list(car);