我有以下单向 ManyToOne 关系:
@Entity
@Table(name = "Child")
public class Child {
@Id
private Integer id;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Parent parent;
}
@Entity
@Table(name = "parent")
public class Parent{
@Id
private Integer id;
}
当我尝试从数据库中删除父实体时,我遇到了约束冲突。
ORA-02292: integrity constraint violated - child record found
我需要的是父实体被删除,即使它有子实体,但子实体应该保留。
如何改变这种关系?
最佳答案
如果使用关系,则无法使用 JPA。使其成为 ManyToOne 表示外键字段中的值将存在于父表中。 JPA 将无法区分空 fk 值和父表中没有关联行的 fk 值。
如果确实必须完成(并且在我看来不应该这样做),则需要使用基本映射而不是 ManyToOne 来映射 Child 中的整数外键值。这允许它的设置独立于现有的父实体 - null 表示 null,a value 表示一个值。如果需要实体本身,您可以查询关联的父实体。
关于java - ManyToOne 单向禁用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17974983/