java多通单向禁用约束
我有以下单向多通关系:
@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
我需要的是父实体被删除,即使它有子实体,但子实体应该保留
我如何改变这种关系
# 1 楼答案
如果使用关系,则不能使用JPA。将其设为manyTone表示外键字段中的值将存在于父表中。JPA将无法区分空fk值和父表中没有关联行的fk值
如果确实必须这样做(在IMO中不应该这样做),则需要使用基本映射(而不是manyTone)来映射Child中的整数外键值。这允许它独立于现有的父实体进行设置-null表示null,值表示值。如果需要关联的父实体本身,则可以查询该父实体
# 2 楼答案
也许在manytone上使用可选的=true参数会有所帮助
我假设您直接从Hibernate创建模式。目标是使外键字段在数据库中可以为空
# 3 楼答案
事实上,这是可以做到的
在描述包含此外键列的表时,将外键指定为缺少引用完整性约束是合乎逻辑的
当然,在开发一些OLTP系统时,删除存在层中的引用完整性约束并不是最佳实践;但对于数据仓库类似的解决方案(首先加载数据,然后检查整个数据仓库),这可能是正确的方法