簡體   English   中英

QueryDSL 生成的類無法訪問二級元素進行查詢

[英]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;

}

https://github.com/querydsl/querydsl/issues/2129

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM