gpt4 book ai didi

java - @OneToOne 未使用 OpenJPA 在 CriteriaBuilder 中获取

转载 作者:行者123 更新时间:2023-12-02 01:46:27 26 4
gpt4 key购买 nike

考虑以下映射

@Table(
name = "VerkoopOrder"
)
public class VerkoopOrder implements DatabaseEntity, Auditable {

@Id
@Column(
name = "VerkoopOrderId",
nullable = false
)
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
public Long getVerkoopOrderId() {
return this.verkoopOrderId;
}

@OneToOne(
fetch = FetchType.LAZY
)
@JoinColumn(
name = "BetalingsInformatieId"
)
public BetalingsInformatie getBetalingsInformatie() {
return this.betalingsInformatie;
}
}

@Table(
name = "BetalingsInformatie"
)
public class BetalingsInformatie implements DatabaseEntity, Auditable {
@Id
@Column(
name = "BetalingsInformatieId",
nullable = false
)
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
public Long getBetalingsInformatieId() {
return this.betalingsInformatieId;
}

@OneToOne(
mappedBy = "betalingsInformatie"
)
public VerkoopOrder getVerkoopOrder() {
return this.verkoopOrder;
}
}

我正在尝试使用 criteriabuilder 中的一对一 BetalingsInformatie 查询 VerkoopOrder 列表

    CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();

CriteriaQuery<VerkoopOrder> query = builder.createQuery(VerkoopOrder.class);
Root<VerkoopOrder> verkoopOrder = query.from(VerkoopOrder.class);
verkoopOrder.fetch(BETALINGSINFORMATIE, JoinType.LEFT);
Join<VerkoopOrder, VerkoopOrderLijn> verkoopOrderLijnen = verkoopOrder.join(VERKOOPORDER_LIJNEN);
verkoopOrder.fetch(VERKOOPORDER_LIJNEN);
query.select(verkoopOrder);
query.distinct(true);

PredicateBuilder predicateBuilder = new PredicateBuilder(builder, verkoopOrder);

predicateBuilder
.addEqualPredicate(UUID, criteria.getUuid())
.addEqualPredicate(AANKOPER_ID, criteria.getAankoperId())
.addEqualPredicate(verkoopOrderLijnen.get(MSISDN), criteria.getMsisdn())
.addEqualPredicate(STATUS, criteria.getStatus())
.addEqualPredicate(verkoopOrderLijnen.get(VERVOERCONTRACT).get(VERVOERCONTRACT_ID), criteria.getVervoerContractId())
.addDateTimeRangePredicate(TIMESTAMP_CREATED, criteria.getTimestampCreatedStart(), criteria.getTimestampCreatedEnd())
.addDateTimeRangePredicate(TIMESTAMP_UPDATED, criteria.getTimestampUpdatedStart(), criteria.getTimestampUpdatedEnd());

query.where(predicateBuilder.build());
query.orderBy(builder.desc(verkoopOrder.get(TIMESTAMP_UPDATED)));

TypedQuery<VerkoopOrder> typedQuery = getEntityManager().createQuery(query);

List<VerkoopOrder> verkoopOrders = typedQuery.getResultList();

但是“betalingsInformatie”字段始终为 null ,(您还可以看到我正在获取 VerkoopOrderLijnen 的列表,该列表已按其应有的方式填写。我还能尝试什么来获取betalingsInformatie ?我担心必须单独查询服务中的每个 betalinginformatie 字段,而不是直接从查询结果中查询。

有人有任何见解吗?请记住,这是使用 OpenJPA 实现,而不是 hibernate 或 eclipselink

最佳答案

惰性 JPA 属性可以引发异常,或者执行它们应该执行的操作:加载其他实体。您没有看到异常 -> 实体必须已加载。 Null 可能是正确的结果。请检查您正在加载的特定记录的连接列。我猜想没有其他实体从那里映射。

关于java - @OneToOne 未使用 OpenJPA 在 CriteriaBuilder 中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com