@Entity
@Getter
@Setter
@Table(name = "children")
public class Child extends BaseEntity {
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
@OneToOne
@JoinColumn(name = "group_id", referencedColumnName = "id")
private Group group;
@Column(name = "medical_info")
private String medicalInfo;
@Column(name = "birth_date")
@Temporal(TemporalType.DATE)
private Date birthDate;
@Column(name = "starting_date")
@Temporal(TemporalType.DATE)
private Date startingDate;
@Column(name = "native_language")
private String nativeLanguage;
@Column(name = "second_language")
private String secondLanguage;
private String picture;
}
我试图删除一个组,但这失败了,因为有些孩子有fk到该组。该组没有任何fk到子级。我可以找到所有的孩子与fk到该组,并设置该组为空,然后保存,但这看起来黑客和肯定有一个更好的选择。我怎样才能很好地移除fk?
1条答案
按热度按时间qcuzuvrc1#
如果要在父级设置空值,可以在字段中使用级联注解。您可以在规范中找到更多详细信息:https://docs.oracle.com/cd/e19798-01/821-1841/bnbqm/index.html
另一种情况是,如果要删除相关实体,也可以尝试删除相关字段上带有注解的属性。引用jpa 2.0规范中的相关部分:
指定为onetoone或onetomany的关联支持使用孤立删除选项。当删除生效时,将应用以下行为:
如果作为关系目标的实体从关系中移除(通过将关系设置为null或从关系集合中移除实体),则移除操作将应用于孤立的实体。清除操作在冲洗操作时应用。孤儿删除功能适用于由其父实体私有的实体。可移植应用程序不能依赖于特定的删除顺序,也不能将孤立的实体重新分配给另一个关系或试图持久化它。如果孤立实体是分离的、新的或删除的实体,则孤立删除的语义不适用。
如果删除操作应用于托管源实体,则删除操作将按照第3.2.3节的规则级联到关系目标(因此不必为关系指定cascade=remove)
孤立删除规范:https://docs.oracle.com/cd/e19798-01/821-1841/giqxy/