Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Hibernate jpa实体未更新数据库中的关系操作_Hibernate_Spring Boot_Jpa_Foreign Keys - Fatal编程技术网

Hibernate jpa实体未更新数据库中的关系操作

Hibernate jpa实体未更新数据库中的关系操作,hibernate,spring-boot,jpa,foreign-keys,Hibernate,Spring Boot,Jpa,Foreign Keys,我将component对象映射到componentMeta对象,并设置了cascade(javax.persistence.CascadeType)action=all,但数据库中的关系操作仍然是受限的(它不会更新为cascade) 以下是组件对象: @Entity @Table(name = "component") public class Component { private int idComponent; private Li

我将component对象映射到componentMeta对象,并设置了cascade(javax.persistence.CascadeType)action=all,但数据库中的关系操作仍然是受限的(它不会更新为cascade)

以下是组件对象:

@Entity
@Table(name = "component")
public class Component {

    private int                     idComponent;
    private List<ComponentMeta>     componentMetas;

    public Component() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getIdComponent() {
        return this.idComponent;
    }

    public void setIdComponent(int idComponent) {
        this.idComponent = idComponent;
    }

    @OneToMany(mappedBy = "component", cascade = CascadeType.ALL)
    public List<ComponentMeta> getComponentMetas() {
        return this.componentMetas;
    }

    public void setComponentMetas(List<ComponentMeta> componentMetas) {
        this.componentMetas = componentMetas;
    }
}
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
数据库中有关于关系操作的图片(不更新为级联):

我在spring boot中的hibernate配置(application.properties):

@Entity
@Table(name = "component")
public class Component {

    private int                     idComponent;
    private List<ComponentMeta>     componentMetas;

    public Component() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getIdComponent() {
        return this.idComponent;
    }

    public void setIdComponent(int idComponent) {
        this.idComponent = idComponent;
    }

    @OneToMany(mappedBy = "component", cascade = CascadeType.ALL)
    public List<ComponentMeta> getComponentMetas() {
        return this.componentMetas;
    }

    public void setComponentMetas(List<ComponentMeta> componentMetas) {
        this.componentMetas = componentMetas;
    }
}
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

为什么关系操作不自动更新到级联?

如果希望hibernate在外键上的删除级联上生成
@OnDelete
则需要将
@OneToMany
放在
@OneToMany
一侧:

@OneToMany(mappedBy = "component", cascade = CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)

JPA中的关系总是单向的,除非您在两个方向上都将父对象与子对象关联。从父级到子级的级联删除操作需要父级到子级的关系(而不仅仅是相反的关系)

因此,您需要执行以下操作:

或者,将单向@ManyToOne关系更改为双向@ManyToOne或单向@OneToMany。然后可以级联删除操作,以便EntityManager.REMOVE将删除父级和子级。您还可以将“孤立删除”指定为true,以便在父集合中的子实体设置为null时删除任何孤立的子实体,即在任何父集合中都不存在子实体时删除该子实体。
或者,将子表中的外键约束指定为DELETE CASCADE。在调用EntityManager.remove(parent)后,您需要调用EntityManager.clear(),因为需要刷新持久性上下文-在数据库中删除子实体后,子实体不应存在于持久性上下文中。

JPA关系注释中的标志与外键的生成方式无关。它们涉及到JP A提供商如何处理持久性/更新/删除等问题。哦,我知道了,谢谢你的帮助:)有什么消息吗?你解决你的问题了吗?