В отношении 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);
    }

}

Ответы (0 шт):