EntityNotFoundException:在OneToOne映射上找不到ID为5的子类

时间:2018-10-29 00:11:42

标签: java hibernate spring-mvc spring-boot jpa

最初,我开始在@OneToOne映射方案中解决N + 1选择问题,最后终于将多个选择查询减少为一个。我尝试使用EntityGraphs解决N + 1问题,但是它不起作用。所以我通过将fetch Type设置为Lazy并设置Optional = false来将@OneToOne映射更改为LAZY。 我正在使用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;

}

Repository类如下,

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());
  }
}

没有optional = false的情况,LazyLoading不起作用,并且我得到N + 1个Select查询语句,但是当我设置了optional = false时, 抛出EntityNotFoundException异常。当optional = false语句被删除/设置为true时,不会引发EntityNotFoundException,但是它不能解决我的N + 1选择问题。

请提供一些建议。

1 个答案:

答案 0 :(得分:0)

尝试使用未发现的忽略项,如下所示。

@NotFound(action = NotFoundAction.IGNORE)

引用this