使用 QueryDSL 子类型时的空指针
Null pointer when using QueryDSL subtypes
我正在尝试按照以下几行创建一个子类型查询,但是即使我在汽车的车轮 属性 上设置了 @QueryInit("tyre"),轮胎也会返回为 null。
QWheel wheel = QCar.car.wheel;
QTyre tyre = wheel.as(QRoadWheel.class).tyre;
BooleanExpression tyreFittedOverYearAgo
= tyre.fitted.lt(today.minusYears(1));
Iterable<Car> carsWithOldTyres = repo.findAll(tyreFittedOverYearAgo);
如何让 QueryDSL 在使用 as() 访问时初始化轮胎?
默认情况下,Querydsl 仅初始化直接引用属性。如果需要更长的初始化路径,则必须通过 com.mysema.query.annotations.QueryInit 用法在域类型中注释这些路径。 QueryInit 用于需要深度初始化的属性。
@Entity
class Event {
@QueryInit("customer")
Account account;
}
@Entity
class Account{
Customer customer;
}
@Entity
class Customer{
String name;
String address;
}
这将初始化 customer.name ,customer.address
我一直无法确定原因,但我现在已经开始工作了,但是通过使用:
@QueryInit("*")
Tyre tyre;
我正在尝试按照以下几行创建一个子类型查询,但是即使我在汽车的车轮 属性 上设置了 @QueryInit("tyre"),轮胎也会返回为 null。
QWheel wheel = QCar.car.wheel;
QTyre tyre = wheel.as(QRoadWheel.class).tyre;
BooleanExpression tyreFittedOverYearAgo
= tyre.fitted.lt(today.minusYears(1));
Iterable<Car> carsWithOldTyres = repo.findAll(tyreFittedOverYearAgo);
如何让 QueryDSL 在使用 as() 访问时初始化轮胎?
默认情况下,Querydsl 仅初始化直接引用属性。如果需要更长的初始化路径,则必须通过 com.mysema.query.annotations.QueryInit 用法在域类型中注释这些路径。 QueryInit 用于需要深度初始化的属性。
@Entity
class Event {
@QueryInit("customer")
Account account;
}
@Entity
class Account{
Customer customer;
}
@Entity
class Customer{
String name;
String address;
}
这将初始化 customer.name ,customer.address
我一直无法确定原因,但我现在已经开始工作了,但是通过使用:
@QueryInit("*")
Tyre tyre;