EntityNotFoundException: невозможно найти дочерний класс с идентификатором 5 в сопоставлении OneToOne - PullRequest
0 голосов
/ 29 октября 2018

Сначала я начал решать проблему выбора N + 1 в моем сценарии отображения @OneToOne, и, наконец, мне удалось сократить количество запросов на выборку до одного.Я пытался использовать EntityGraphs для решения проблемы N + 1, но это не работает.Поэтому я изменил свое отображение @OneToOne на LAZY, установив тип выборки на Lazy и установив Optional = false.Я использую Hibernate JPA.

Я внес изменения, как показано ниже

Public Class Parent {

  @OneToOne(
      optional = false,
      mappedBy = "parent",
      fetch = FetchType.LAZY,
      cascade = {CascadeType.ALL})
  @NotFound
  private Child child;
}

В классе «Мой ребенок»

Public Class Child {

  @Id
  private String Id;

  @OneToOne
  @PrimaryKeyJoinColumn
  private Parent parent;

}

Класс репозитория такой, как показано ниже,

public interface ParentChildRepository extends PagingAndSortingRepository<Transaction, String> {


  @EntityGraph(value = "Parent.EntityGraph", type = EntityGraphType.LOAD)
  default List<Transaction> findall() {
    return StreamSupport.stream(findAll().spliterator(), false).collect(Collectors.toList());
  }
}

Без необязательного = false, LazyLoading не работает, и я получаю N + 1 операторов выбора запросов, но когда я устанавливаю необязательное = false, генерируется исключение EntityNotFoundException.EntityNotFoundException не генерируется, когда необязательный оператор = false удален / установлен в значение true, но он не устраняет мою проблему выбора N + 1.

Пожалуйста, предоставьте некоторые предложения.

1 Ответ

0 голосов
/ 29 октября 2018

Попробуйте использовать игнорируемое игнорирование, как показано ниже.

@NotFound(action = NotFoundAction.IGNORE)

См. это

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