[英]QueryDSL Generated classes not able to access second level elements for querying
我在我的 Java 项目中使用带有 Spring Data JPA 的 QueryDSL,并使用 QueryDSL maven 插件生成文件来使用它生成的 QueryDSL 模型类。 当我将它用于一级嵌套对象时,这很有效,但是如果我尝试访问二级访问对象,它会给出 NullPointerException 保存二级模型对象未初始化。
希望得到一些帮助。
我在第 3 行 qmachine.vendor 中收到 NullPointerException 为空。
QTransaction qtransaction = QTransaction.transaction;
QMachine qmachine = qtransaction.machine;
BooleanExpression vendorexp = qmachine.vendor.vendor.eq(machineType);
我的映射类如下:交易
@Entity
@Table(name = "dsdsd")
public class Transaction extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "machine_id")
private Machine machine;
}
而 Machine 类是:
@Entity
@Table(name="machine")
public class Machine extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name="vendor_id")
private Vendor vendor;
}
供应商类是
@Entity
@Table(name="vendors")
public class Vendor extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@Column(name="vendor")
@Enumerated(EnumType.STRING)
private VendorType vendor;
}
我有意省略了 getter 和 setter。
默认情况下,仅初始化第一级。 有关初始化选项,请参阅此文档部分: http : //www.querydsl.com/static/querydsl/3.6.0/reference/html/ch03s03.html#d0e2192
由于存在无限循环的可能性,最终字段无法进行完全深度初始化,但 Querydsl 还提供了属性访问器方法的选项。
http://www.querydsl.com/static/querydsl/2.2.4/reference/html/ch03s02.html
您需要在Transaction.machine
属性上使用@QueryInit("vendor.vendor")
@Entity
@Table(name = "dsdsd")
public class Transaction extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "machine_id")
@QueryInit("vendor.vendor")
private Machine machine;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.