gpt4 book ai didi

java - 使用 Criteria API 获取并发表

转载 作者:行者123 更新时间:2023-12-01 16:56:02 25 4
gpt4 key购买 nike

我有3个实体类:(BaseAutoIncrementModel 包含每个实体的 id 声明)

表 1:文件

@Entity
@Table(name = "DOSSIER", schema = "ADOP")
public class Dossier extends BaseAutoIncrementModel<Integer> implements BaseModelCode<Integer> {
...
}

表 2:AlerteDossier

@Entity
@Table(name = "ALERTE_DOSSIER", schema = "ADOP")
public class AlerteDossier extends BaseAutoIncrementModel<Integer> implements BaseModelCode<Integer> {

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "FK_DOSSIER")
private Dossier dossier;

...
}

表 3:AlerteEnvoi

@Entity
@Table(name = "ALERTE_ENVOI", schema = "ADOP")
public class AlerteEnvoi extends BaseAutoIncrementModel<Integer> implements BaseModelCode<Integer> {

@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "FK_ALERTE_DOSSIER")
private AlerteDossier alerteDossier;

...
}

我有什么atm:

CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<AlerteEnvoi> query = builder.createQuery(AlerteEnvoi.class);
Root<AlerteEnvoi> root = query.from(AlerteEnvoi.class);
query.select(root);
List<Predicate> predicateList = new ArrayList<>();
...

正如您在 AlerteEnvoi 中看到的,AlerteDossier 表是急切加载的,尽管在 AlerteDossierDossier 表是延迟加载的。

我需要使用 Criteria Api 创建 AlerteEnvoi 的选择语句,其中 Dossier 也将加载到 AlerteDossier 实体中。我知道如果 AlerteDossier 是延迟加载的(root.fetch( “alerteDossier”,JoinType.LEFT),但我不知道如何获取子实体的子实体。任何人都可以帮助我吗?

最佳答案

我还没有测试过它,但从同事那里听说这样的事情应该是可行的:

Fetch<AlerteEnvoi, AlerteDossier> fetchAlerteDossier = root.fetch("alerteDossier", JoinType.LEFT);
fetchAlerteDossier.fetch("dossier", JoinType.LEFT);

一旦我测试过这个答案,我就会接受它。

关于java - 使用 Criteria API 获取并发表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61590355/

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