0

我是新人,目前创建了 2 个实体。我已经建立了 onetomany - manytoone 关系,但是当我尝试查看 hibernate 运行的 sql 查询时,它会为 manytoone 关系进行多个查询。下面是我尝试过的代码片段。

@Entity
@Data
@NoArgsConstructor
@Table(name = "claim")
@AllArgsConstructor
public class Claim {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;

  @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
  @JoinColumn(name = "claim_id", nullable = false)
  private List<Item> items;

}



@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "items")
public class Item {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @JsonIgnore
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "claim_id", insertable = false, updatable = false)
  private Claim claim;

  private String name;
}

@Repository
public interface ClaimSqlRepository extends PagingAndSortingRepository<Claim, Long>, JpaSpecificationExecutor<Claim> {
}

@RequestMapping("/claims")
  @ResponseBody
  public Page<Claim> getClaims(
      Pageable pageable
  ) {
 Page<Claim> page = ClaimSqlRepository.findAll(pageable);
}

在我有一个 GET 请求然后我检查终端之后,对 item 执行了多个查询。我已经看到了很多帖子,但仍然无法找到问题所在。我的存储库实现了 PagingAndSortingRepository 和 JpaSpecificationExecutor。我正在为此进行 findAll 调用。下面与我在 sql-show for Hibernate 中看到的类似。

Hibernate: select claim0_.id as id1_0_ from claims claim0_ where 1=1 limit ?

Hibernate: select items0_.claim_id as clai4_1_0_, items0_.id as id1_1_0_ from items items0_ where items0_.claim_id=?

Hibernate: select items0_.claim_id as clai4_1_0_, items0_.id as id1_1_0_ from items items0_ where items0_.claim_id=?

Hibernate: select items0_.claim_id as clai4_1_0_, items0_.id as id1_1_0_ from items items0_ where items0_.claim_id=?
4

0 回答 0