我是新人,目前创建了 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=?