我正在用SpringBoot做一个小应用程序,当我试图删除一个类别并将其放入ondeletecascade时会抛出这个错误,我正在搜索信息,但我发现的一切都不能解决我的问题,如果有人能帮我,我将非常感激。
以下是部分错误:
java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`platos`.`plato`, CONSTRAINT `FKd7wg8wh3ov5moo4er9jj4vd8b` FOREIGN KEY (`id_cat`) REFERENCES `categoria` (`id`))
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) ~[mysql-connector-java-8.0.22.jar:8.0.22]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.22.jar:8.0.22]
下面是一些代码:
实体板
package cf.victorlopez.platosrestaurantespring.models.entity;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "plato")
public class Plato {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) /**Para auto_increment**/
@Column(name = "id", updatable = false, nullable = false)
private Integer id;
@Column(unique=true)
private String nombre;
@Column
private String descripcion;
@Column
private String foto;
@NotNull
@JoinColumn(name = "id_cat",nullable = false)
@ManyToOne(optional = false, fetch = FetchType.EAGER,cascade = CascadeType.REFRESH)
private Categoria categoria;
public Plato() {
this.id = -1;
this.foto = "";
this.nombre="";
this.descripcion="";
this.categoria = new Categoria();
}
public Plato(String nombre, String descripcion, String foto, Categoria cat) {
this.id = -1;
this.nombre = nombre;
this.descripcion = descripcion;
this.foto = foto;
this.categoria = cat;
}
public Integer getId() {
return id;
}
/**No permitimos modificar el id desde fuera ya que es de tipo autoincrement */
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Plato plato = (Plato) o;
return id == plato.id;
}
@Override
public int hashCode() {
return id;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public void setId(Integer id) {
this.id = id;
}
public Categoria getCategoria() {
return categoria;
}
public void setCategoria(Categoria categoria) {
this.categoria = categoria;
}
}
实体类别
package cf.victorlopez.platosrestaurantespring.models.entity;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name = "categoria")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) /**Para auto_increment**/
@Column(name = "id", updatable = false, nullable = false)
private Integer id;
@Column(unique=true)
private String nombre;
@Column
private String descripcion;
@Column
private String foto;
@OneToMany(mappedBy = "categoria",cascade = CascadeType.REMOVE)
private List<Categoria> categoria;
public Categoria() {
this.id = -1;
this.foto = "";
this.nombre="";
this.descripcion="";
}
public Categoria(String nombre, String descripcion, String foto) {
this.id = -1;
this.nombre = nombre;
this.descripcion = descripcion;
this.foto = foto;
}
public Integer getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Categoria plato = (Categoria) o;
return id == plato.id;
}
@Override
public int hashCode() {
return id;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public void setId(Integer id) {
this.id = id;
}
}
1条答案
按热度按时间9bfwbjaz1#
试试这个:
在我的代码中,我没有指定cascade,所有的操作都在工作。