Невозможно удалить или обновить родительскую строку ограничение внешнего ключа завершается ошибкой JPA Spring Boot

#java #mysql

#java #mysql

Вопрос:

У меня есть таблица запросов, связанная с 2 таблицами, где я сохраняю номер запроса в соответствии с типом запроса, который может быть запросом на анализ воды и запросом на анализ почвы, но когда я пытаюсь удалить или обновить таблицу запросов, я получаю сообщение об ошибке

 Cannot delete or update a parent row: a foreign key constraint fails
 

Мой код, который реализует отношения, выглядит следующим образом

//класс для запроса

 @Entity
@Table(name = "solicitud")
public class Solicitud implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    //@Column(unique=true)
    //private String codigo;
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Estado estado;
    
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.DATE)
    @NotNull
    @Column(name="fecha")
    private Date fecha;
    
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario usuario;
    
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario teclab;
    
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoMuestra tmuestra;
    
    
    
    //@Min(value = 0L, message = "Debe ingresar un valor positivo")
    //@Pattern(regexp = "[\s]*[0-9]*[1-9] ",message="msg")
    @NotNull
    private Integer numMuestras;
    
    int year = 0;
    
    
    
    public Long getId() {
        return id;
    }



    public void setId(Long id) {
        this.id = id;
    }



    public Estado getEstado() {
        return estado;
    }



    public void setEstado(Estado estado) {
        this.estado = estado;
    }



    public Date getFecha() {
        return fecha;
    }



    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }
    
    


    public Usuario getUsuario() {
        return usuario;
    }



    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }




    public TipoMuestra getTmuestra() {
        return tmuestra;
    }



    public void setTmuestra(TipoMuestra tmuestra) {
        this.tmuestra = tmuestra;
    }
    
    public Integer getNumMuestras() {
        return numMuestras;
    }



    public void setNumMuestras(Integer numMuestras) {
        this.numMuestras = numMuestras;
    }




    public Usuario getTeclab() {
        return teclab;
    }



    public void setTeclab(Usuario teclab) {
        this.teclab = teclab;
    }
    
    





    /*@PostPersist
    public void generateCode() {
        CodigoAgua agua=new CodigoAgua();
        agua.setSolicitud(this);
        agua.generateCode();
    }*/






    /**
     * 
     */
    private static final long serialVersionUID = 1L;

}
 

//класс для сохранения номера для запроса типа анализ воды

 @Entity
@Table(name = "cagua")
public class CodigoAgua implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(unique=true)
    private String codigo;
    
    @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="solicitud_id")
    private Solicitud solicitud;
    
    int year = 0;
    
    
    
    public Long getId() {
        return id;
    }

    

    public void setId(Long id) {
        this.id = id;
    }



    public String getCodigo() {
        return codigo;
    }



    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }



    public Solicitud getSolicitud() {
        return solicitud;
    }



    public void setSolicitud(Solicitud solicitud) {
        this.solicitud = solicitud;
    }
    @PostPersist
    public void generateCode() {
        Date date = new Date();
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
          year = localDate.getYear();
          
        this.codigo=year  " - " id " - A";
        System.out.println("Codigo solicitud creado" id this.getSolicitud().getId());
    }

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

}
 

//класс для сохранения номера для запроса типа анализ почвы

 @Entity
@Table(name = "csuelo")
public class CodigoSuelo implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(unique=true)
    private String codigo;
    
    @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="solicitud_id")
    private Solicitud solicitud;
    
    int year = 0;
    
    
    
    
    public Long getId() {
        return id;
    }




    public void setId(Long id) {
        this.id = id;
    }




    public String getCodigo() {
        return codigo;
    }




    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }




    public Solicitud getSolicitud() {
        return solicitud;
    }




    public void setSolicitud(Solicitud solicitud) {
        this.solicitud = solicitud;
    }

    @PostPersist
    public void generateCode() {
        Date date = new Date();
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
          year = localDate.getYear();
          
        this.codigo=year  " - " id " - S";
        System.out.println("Codigo solicitud creado" id this.getSolicitud().getId());
    }


    /**
     * 
     */
    private static final long serialVersionUID = 1L;

}
 

Ответ №1:

Это сообщение указывает, что вы хотите удалить строку из таблицы1, в то время как ее первичный ключ присутствует в виде внешнего ключа в таблице2. Чтобы удалить запись из таблицы1, вы должны удалить все строки, которые ссылаются на нее в других таблицах, чтобы иметь возможность удалить эту запись. Я надеюсь, что я вам помог

Комментарии:

1. есть идеи, как я мог бы это сделать?