В отношении many-to-many не удаляется запись в одной из связанных таблиц
Есть три таблицы: film, extratable, repertuar. При удалении фильма из таблицы repertuar должны удаляться все связанные записи, но этого не происходит, хотя из дополнительной таблицы extratable записи удаляются. Я уже многое попробовала почитав stack, но ничего не помогло из того, что я видела. Точнее при удалении записи из таблицы (например film), состоящей в таком отношении, удаление происходит непосредственно в ней и в таблице связей(extratable). Почему не удаляется связанная запись из последней таблицы (repertuar)?
Класс Film:
import javax.persistence.*;
import java.sql.Time;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
@Entity
@Table(name = "film", schema = "cinema")
public class Film
{
private int idfilm;
private String name;
private Time duration;
@OneToMany(fetch = FetchType.LAZY, mappedBy="film" , cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST,CascadeType.REMOVE})
private Set<Session> sessions = new HashSet<>();
@Id
@Column(name = "idfilm")
public int getIdfilm() { return idfilm;}
public void setIdfilm(int idfilm) { this.idfilm = idfilm; }
@Column(name = "name")
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@Column(name = "duration")
public Time getDuration() { return duration; }
public void setDuration(Time duration) { this.duration = duration; }
@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.REMOVE}, fetch = FetchType.EAGER, targetEntity = Repertuar.class)
@JoinTable(name = "extratable",
joinColumns = @JoinColumn(name = "idfilm"),
inverseJoinColumns = @JoinColumn(name = "idrepertuar")
)
public Set<Repertuar> repertuars = new HashSet<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Entities.Film that = (Entities.Film) o;
return idfilm == that.idfilm && Objects.equals(name, that.name) && Objects.equals(duration, that.duration);
}
Класс Repertuar:
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
@Entity
@Table(name = "repertuar", schema = "cinema")
public class Repertuar
{
private int idrepertuar;
private int month;
@Id
@Column(name = "idrepertuar")
public int getIdrepertuar() {
return idrepertuar;
}
public void setIdrepertuar(int idrepertuar) {
this.idrepertuar = idrepertuar;
}
@Column(name = "month")
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
/*@ManyToMany(mappedBy = "repertuars", cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
private Set<Film> films=new HashSet<>();*/
@ManyToMany (cascade = {CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinTable(name = "extratable",
joinColumns = @JoinColumn(name = "idrepertuar"),
inverseJoinColumns = @JoinColumn(name = "idfilm")
)
private Set<Film> films = new HashSet<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Repertuar that = (Repertuar) o;
return idrepertuar == that.idrepertuar && month == that.month;
}
@Override
public int hashCode() {
return Objects.hash(idrepertuar, month);
}
}
Класс Extratable:
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
@Entity
@Table(name = "extratable", schema = "cinema")
public class Extratable implements Serializable
{
private int idfilm;
private int idrepertuar;
@Id
@Column(name = "idfilm")
public int getIdfilm() {
return idfilm;
}
public void setIdfilm(int idfilm) {
this.idfilm = idfilm;
}
@Id
@Column(name = "idrepertuar")
public int getIdrepertuar() {
return idrepertuar;
}
public void setIdrepertuar(int idrepertuar) {
this.idrepertuar = idrepertuar;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Extratable that = (Extratable) o;
return idfilm == that.idfilm && idrepertuar == that.idrepertuar;
}
@Override
public int hashCode() {
return Objects.hash(idfilm, idrepertuar);
}
}