Hibernate jpa实体未更新数据库中的关系操作
我将component对象映射到componentMeta对象,并设置了cascade(javax.persistence.CascadeType)action=all,但数据库中的关系操作仍然是受限的(它不会更新为cascade) 以下是组件对象: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
@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提供商如何处理持久性/更新/删除等问题。哦,我知道了,谢谢你的帮助:)有什么消息吗?你解决你的问题了吗?