使用条件API获取并发表



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

表1:档案

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

表2:警报档案

@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:AlertEnvoi

@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表被急切地加载,而在AlerteDossier中,Dossier表被延迟地加载。

我需要使用CriteriaApi为AlerteEnvoi创建一个select语句,其中Dossier也将加载在AlerteDossier实体中。我知道如果AlerteDossier将被延迟加载(root.fetch("alerteDossier", JoinType.LEFT(,我需要如何在AlerteEnvoi中获取AlerteDossier,但我不知道如何获取子实体的子实体。有人能帮我吗?

我还没有测试过,但从一位同事那里听说,应该可以做这样的事情:

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

一旦我测试了这个答案,我就会把它当作已接受的答案。

相关内容

  • 没有找到相关文章

最新更新