在此之前,有一个非常类似的问题。 Hibernate set foreign key to null when delete entity 它甚至有一个公认的答案,可以避免在Page.modelViews端触发的插入和更新中使用该列,从而避免使FK无效。
问题和答案都存在问题,在此示例中,关系的双方都是拥有方!哪个AFAIK不好?例如,“ Pro JPA 2”这样说:“没有连接列的那一面称为非拥有或反面。”
让我们稍微修改一下示例。让我们制作“私有页面页面”;拥有方,而Set <>相反(... mappedBy = ...)。在这种情况下,反面不能用@JoinColumn注释。 我们该如何解决?没有级联删除,就是这样。
在大致指定了反面的情况下,最初问题的代码大致如下:
@Entity
public class ModelView {
@ManyToOne
@NotNull
private Page page;
}
@Entity
public class Page {
@OneToMany(mappedBy = "page")
private Set<ModelView> modelViews = new HashSet<ModelView>();
}
并考虑我们要删除Page实体。我们如何防止JPA将ModelViews中所有实体的ModelView.page设置为null?