如何解决SpringBoot App 抛出 ava.sql.SQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败
我正在用 Spring Boot 做一个小应用程序,当我尝试删除一个类别时抛出了这个错误,我把它放在了DeleteCascade 上,我正在搜索信息,但我找到的一切都不能解决我的问题,如果有人可以提供帮助我将不胜感激。
这是错误的一部分:
from django.db.models import F
from django.db.models.functions import ACos,Cos,radians,Sin
locations = Location.objects.annotate(
distance_miles = ACos(
Cos(
radians(input_latitude)
) * Cos(
radians(F('latitude'))
) * Cos(
radians(F('longitude')) - radians(input_longitude)
) + Sin(
radians(input_latitude)
) * Sin(radians(F('latitude')))
) * 3959
).order_by('distance_miles')[:10]
这是一些代码:
实体板块
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;
}
}
解决方法
试试这个:
@OneToMany(mappedBy = "categoria")
private List<Categoria> categoria;
@ManyToOne(optional = false,fetch = FetchType.EAGER)
private Categoria categoria;
在我的代码中,我没有指定级联,所有操作都在工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。