Spring boot Spring数据JPA仅在父实体是延迟获取的情况下删除子实体

Spring boot Spring数据JPA仅在父实体是延迟获取的情况下删除子实体,spring-boot,hibernate,spring-data-jpa,Spring Boot,Hibernate,Spring Data Jpa,我有一个用户类,它有一个字段: @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) @JsonManagedReference private Set<FavoriteProduct> favoriteProducts = new HashSet<>(); 当我试图通过favorite produ

我有一个用户类,它有一个字段:

@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private Set<FavoriteProduct> favoriteProducts = new HashSet<>();
当我试图通过favorite product repository(扩展了
JpaRepository
存储库)删除喜爱的产品时,它没有成功

但是,当我将
EAGER
fetch更改为
LAZY
fetch时,它会工作,如下所示:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "users_id", nullable = false)
@JsonBackReference
private User user;
原因是什么?

  • 如果子对象是从父对象引用的,则Hibernate不会删除该子对象

  • 使用
    FetchType.EAGER
    ,您也在初始化与父级的关联

  • 使用
    FetchType.LAZY
    ,除非您尝试在持久性上下文中访问该用户,否则将不会加载
    user
    关联

  • 在删除之前,您可以先尝试访问
    用户
    。即使使用
    FetchType.LAZY


您能否验证此部分:您可以在删除之前先尝试访问用户。即使使用FetchType.lazy,它也应该模拟类似的行为。另一方面,在这种情况下,为什么不cascade=CascadeType.ALL,orphanRemoving=true effects?
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "users_id", nullable = false)
@JsonBackReference
private User user;