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
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "users_id", nullable = false)
@JsonBackReference
private User user;