#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. есть идеи, как я мог бы это сделать?