Получать параллельные таблицы с помощью Criteria API - PullRequest
0 голосов
/ 04 мая 2020

У меня есть 3 класса сущностей: (* ​​1001 * содержит объявление идентификатора для каждой сущности)

Таблица 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;

    ...
}

Что у меня есть атм:

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 загружается лениво.

Мне нужно создать используя Criteria Api, оператор выбора для AlerteEnvoi, где Dossier также будет загружен в сущности AlerteDossier. Я знаю, как мне нужно получить AlerteDossier в пределах AlerteEnvoi, если AlerteDossier будет загружен лениво (root.fetch("alerteDossier", JoinType.LEFT), я не имею ни малейшего понятия, как получить подобъект суб-объекта. сущность хотя. Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 06 мая 2020

Я еще не проверял это, но слышал от коллеги, что-то вроде этого должно быть выполнимо:

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

Я буду ставить этот ответ как принятый, как только я проверю это вне.

...