Загрузить дочерний объект в Hibernate на основе логического флага - PullRequest
1 голос
/ 28 мая 2020

есть ли способ в Hibernate 3.6 загружать только дочерний объект, если для логического флага в родительском объекте установлено значение true?

Например:

@Entity
class Parent {
  @OneToOne
  private Child child;
  private boolean loadChild;
}

Итак если loadChild == false, дочерний элемент не должен загружаться из базы данных и всегда иметь значение null, в противном случае он должен быть загружен (если он доступен, конечно). В настоящее время дочерний элемент загружен с нетерпением, и было бы неплохо оставить его таким. Было бы легко загрузить его, а затем использовать геттер для возврата значения null, но это повлияло бы на производительность из-за загрузки дочернего элемента, который на самом деле не нужен.

1 Ответ

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

Я не уверен, поддерживает ли JPA и / или Hibernate это напрямую. Одно из возможных решений:

Переместитесь вниз loadChild к Child, а затем используйте @Where в Parent.

Но на уровне поля @Where работает только для атрибутов, имеющих значение коллекции. Таким образом, вам придется обернуть ребенка Collection, чтобы @Where работал.

@Where(clause = "load_with_parent = true") // lets say the column name is load_with_parent
@OneToMany
private List<Child> childs;

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...