JPA Criteria API рекурсивная выборка ленивых ассоциаций - PullRequest
0 голосов
/ 23 января 2019

У меня есть рекурсивный объект, который связан с самим собой.

@Entity
public class Function {
    (...)

    @ManyToMany(fetch = FetchType.LAZY)
    private Set<Function> children = new HashSet<>();
}

Если эта ассоциация будет стремиться @ManyToMany(fetch = FetchType.EAGER), то все ее дочерние элементы всегда будут инициализированы с одной поездкой в ​​базу данных. Конечно, я не хочу, чтобы эта ассоциация была нетерпеливой.

С помощью API критериев JPA можно получить коллекцию с помощью someRoot.fetch(Function_.children). Он выбирает только один уровень и не является рекурсивным, как тип нетерпеливого извлечения.

Есть ли способ рекурсивно вызывать своих детей, не превращая их в нетерпеливую ассоциацию?

1 Ответ

0 голосов
/ 23 января 2019

Я решил использовать несколько сопоставлений для одной и той же таблицы. В этом есть некоторые опасности, но, поскольку сущности недолговечны, и только одна из них должна быть доступна для записи, это нормально.

В моем случае одному из них даже не нужен доступ к своим дочерним элементам, что еще больше упрощает мою сущность.

@MappedSuperclass
public class BaseFunction {
    (...)
}
@Entity
@Table(name = "function")
public class RecursiveFunction extends BaseFunction {

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<RecursiveFunction> children = new HashSet<>();
}
@Entity
@Table(name = "function")
public class SimpleFunction extends BaseFunction {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...