Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 “@ManyToOne(cascade=CascadeType.ALL)”中发生了什么?它与SQL有什么关系?_Java_Sql_Hibernate - Fatal编程技术网

Java “@ManyToOne(cascade=CascadeType.ALL)”中发生了什么?它与SQL有什么关系?

Java “@ManyToOne(cascade=CascadeType.ALL)”中发生了什么?它与SQL有什么关系?,java,sql,hibernate,Java,Sql,Hibernate,我使用Hibernate作为ORM框架 我有一个双向关系,在Java中实现为: @Entity @Table(name = "Parent") class Parent { ... @OneToMany(cascade = CascadeType.ALL, mappedBy="parent", orphanRemoval=true) private List<Child> c

我使用Hibernate作为ORM框架
我有一个双向关系,在Java中实现为:

    @Entity
    @Table(name = "Parent")
    class Parent {
      ...
    
      @OneToMany(cascade = CascadeType.ALL, mappedBy="parent", orphanRemoval=true)
      private List<Child> child; 
    }
此外,关系数据库表“Child”具有以下外键规范

fk_child_parent FOREIGN_KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
问题1:使用
cascade=CascadeType.All注释子类的外键是否是一种不好的做法?根据我目前的理解,我假设每当我删除一个子项时,我就会级联事务并同时删除父项
由于父级可能有多个子级,这将留下一些孤立子级,这些孤立子级将由于
orphanRemoving=true
选项而被删除。这是正确的吗

问题2:在Java中,我已经使用
@OneToMany(cascade=CascadeType.ALL,…)
指定了从父级到子级的级联操作。SQL行,或者至少是DELETE CASCADE上的
部分,是多余的吗
反之亦然,如果我有SQL行
。。。在指定外键的DELETE CASCADE上,我可以跳过
@JoinColumn
@ManytoOne
注释吗


如果这是一个无关紧要的问题,请原谅。我对数据库/ORM还不熟悉,试图把我的脑袋绕到概念上。

使用
CascadeType。所有
就像使用所有
CascadeType
值,即
CascadeType.PERSIST、CascadeType.MERGE

每个
CascadeType
都引用
EntityManager
上的操作。如果启用了
entityManager.persist(父项)
,则如果启用了
CascadeType.persist
,则Hibernate将自动对列表中的每个元素执行
entityManager.persist(子项)
。其他级联类型也是如此

fk_child_parent FOREIGN_KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE