Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多通单向禁用约束_Java_Hibernate_Jpa_Constraints_Many To One - Fatal编程技术网

Java 多通单向禁用约束

Java 多通单向禁用约束,java,hibernate,jpa,constraints,many-to-one,Java,Hibernate,Jpa,Constraints,Many To One,我有以下单向多通关系: @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{

我有以下单向多通关系:

@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:违反完整性约束-找到子记录

我需要的是父实体被删除,即使它有子实体,但子实体应该保留


我如何改变这种关系

也许多通上的可选=true参数会有所帮助

@Entity
@Table(name = "Child")
public class Child {
    @Id
    private Integer id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
    private Parent parent; 
}

我假设您直接从Hibernate创建模式。我们的目标是使外键字段在数据库中为空。

也许manytone上的可选=true参数会有所帮助

@Entity
@Table(name = "Child")
public class Child {
    @Id
    private Integer id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
    private Parent parent; 
}

我假设您直接从Hibernate创建模式。我们的目标是使数据库中的外键字段可以为空。

如果使用关系,JPA就不能使用。将其设为manyTone表示外键字段中的值将存在于父表中。JPA将无法区分空fk值和父表中没有关联行的fk值


如果确实必须这样做(在IMO中不应该这样做),则需要使用基本映射(而不是manyTone)来映射Child中的整数外键值。这允许它独立于现有的父实体进行设置-null表示null,值表示值。然后,如果需要实体本身,您可以查询关联的父实体。

如果使用关系,您无法使用JPA。将其设为manyTone表示外键字段中的值将存在于父表中。JPA将无法区分空fk值和父表中没有关联行的fk值


如果确实必须这样做(在IMO中不应该这样做),则需要使用基本映射(而不是manyTone)来映射Child中的整数外键值。这允许它独立于现有的父实体进行设置-null表示null,值表示值。然后,如果需要实体本身,您可以查询关联的父实体。

实际上,可以这样做

@JoinColumn(foreignKey = @ForeignKey(name = "none"))
在描述包含此外键列的表时,将外键指定为缺少引用完整性约束是合乎逻辑的


当然,在开发一些OLTP系统时,删除存在层中的引用完整性约束并不是最佳实践;但对于类似于数据仓库的解决方案(先加载数据,然后整体检查),这可能是正确的方法。

实际上,这是可以做到的

@JoinColumn(foreignKey = @ForeignKey(name = "none"))
在描述包含此外键列的表时,将外键指定为缺少引用完整性约束是合乎逻辑的


当然,在开发一些OLTP系统时,删除存在层中的引用完整性约束并不是最佳实践;但是对于数据仓库类似的解决方案(先加载数据,然后检查整个数据仓库),这可能是正确的方法。

根据文档,默认情况下,这是可选的。啊,是的,很好,这在任何情况下都不会帮助您删除父级。但是,是否可以接受双向关系(父端的一个OneToMany集合),以便您可以显式地将每个子级的父级设置为null?根据文档,默认情况下这是可选的啊,是的,很好的一点-在任何情况下,这都不会帮助您删除父级。不过,是否可以接受双向关系(父端的一个OneToMany集合),以便可以将每个子级的父级显式设置为null?@Basic。这是非实体的默认映射types@Basic. 这是非实体类型的默认映射