Как добавить/удалить объект сущности ManyToMany?

У сущности User и Moive есть связь ManyToMany в которой пользователь может добавить фильм в избранные. При добавление фильма в избранные пользователю - сущность сохраняется, но при удалении - ничего не меняется и эта сущность остается. Также и при удалении фильма из избранных пользователя, если фильм уже есть у пользователя в избранных его можно только удалить, но добавить уже не сможешь. Пробовал добавлять так -

User entity {
    public void addFavorite(Movie movie) {
        this.favorites.add(movie);
        movie.getSpectators().add(this);
    }
    
    public void deleteFavorite(Movie movie){
        this.favorites.remove(movie);
movie.getSpectators().removie(this);
    }
}

Но не помогло.

User entity -

@Entity
@Table(name = "user")
@PasswordMatch(message = "Пароль должен совпадать")
public class User implements UserDetails, Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_user")
    private Long idUser;

 
    @Column(name = "username")
    private String username;

 
    @Column(name = "email")
    private String email;

    @Column(name = "activation_code")
    private String activationCode;
 
    @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "role", joinColumns = @JoinColumn(name = "id_user"))
    @Column(name = "name")
    @Enumerated(EnumType.STRING)
    private Set<Role> roles;

    @ManyToMany(fetch = FetchType.EAGER, targetEntity = Movie.class, cascade = CascadeType.ALL)
    @JoinTable(
            name = "user_has_favorite_movie",
            joinColumns = {
                @JoinColumn(name = "user_id")},
            inverseJoinColumns = {
                @JoinColumn(name = "movie_id")})
    private Set<Movie> favorites = new HashSet<>();

    public User() {
    }

Movie entity -

@Entity
@Table(name = "movie")
@NamedQueries({
    @NamedQuery(name = "Movie.findAll", query = "SELECT m FROM Movie m ORDER BY idMovie DESC")})
public class Movie implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_movie")
    private Long idMovie;

    @NotNull
    @Size(max = 80)
    @Column(name = "name")
    private String name;


    @ManyToMany(mappedBy = "favorites", targetEntity = User.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<User> spectators = new HashSet<>();

    public Movie() {
    }

controller который обрабатывает эти запросы -

@GetMapping("{id}/favorite")
public String addFavorite(@AuthenticationPrincipal User user, @PathVariable int id) {
    Movie movie = movieService.getMovieById(id);
    userService.addFavorite(user, movie);
    return "redirect:/watch/" + name + "#movie";
}

@GetMapping("{id}/unfavorite")
public String removeFavorite(@AuthenticationPrincipal User user, @PathVariable int id) {
    Movie movie = movieService.getMovieById(id);
    userService.removeFavorite(user, movie);
    return "redirect:/watch/" + name + "#movie";
}

методы из userService который сохраняет изменения -

public void addFavorite(User user, Movie movie) {

    user.getFavorites().add(movie);

    userRepository.save(user);
}

public void removeFavorite(User user, Movie movie) {

    user.getFavorites().remove(movie);

    userRepository.save(user);
}

Бд - введите сюда описание изображения


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