【发布时间】:2018-10-25 03:31:25
【问题描述】:
我在使用 querydsl 执行非常简单的查询时遇到以下问题。假设我们有两个实体:
汽车----
我想执行一个查询,它返回所有汽车并获取它所有的车主,这些车主是懒惰地映射的。换句话说,我想获取那些在事务之外使用的。
我的查询如下:
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();
我正在使用带有 querydsl 4.1.4 的 spring-boot 2
顺便说一句,在 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);
【问题讨论】:
标签: spring-boot jpql spring-data-rest querydsl