Удалить по многим отношениям одно не сохраняется - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь удалить объект из отношения «многие к одному».Это не выдает никакой ошибки, но кажется, что элемент не удален, и я не знаю почему.Это мои классы:

Субъект клиента:

public class Client extends BaseEntity<Long> {

    private String name;
    private String email;
    private LocalDate dateOfBirth;
    private LocalDate dateOfRegister;

    @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch =
            FetchType.EAGER)
    private Set<Rental> rentals = new HashSet<>();

    ..............
    }

Субъект фильма:

public class Movie extends BaseEntity<Long>{

    private String title;
    private int year;
    private int duration;
    private String genre;
    private double imdbRating;
    private String trailerLink;

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL, fetch =
            FetchType.EAGER)
    private Set<Rental> rentals = new HashSet<>();

    ..................
}

Объект проката (ссылка):


public class Rental implements Serializable {

    @Id
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name = "movie_id")
    private Movie movie;

    @Id
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name = "client_id")
    private Client client;

    @Column(name = "dateRented")
    private LocalDate dateRented;

    @Column(name = "dateDue")
    private LocalDate dateDue;

     .............
}

Класс PrimaryKey:

public class RentalPK implements Serializable {
    private Movie movie;
    private Client client;
}

В контроллере я делаю следующее:

@Override
    public void deleteRental(RentalPK rentalPK) {
        try {
            rentalRepository.deleteById(rentalPK);
        } catch (Exception e) {
            throw e;
        }
    }

Может кто-нибудь объяснить, почему он не удаляется?

1 Ответ

1 голос
/ 19 мая 2019

РЕШИТЬ!Кажется, это произошло из-за CascadeType.ALL в сущностях Movie и Client.Кажется, что CascadeType.ALL содержит также CascadeType.PERSIST, который говорит, что объект ссылки (аренда в моем случае) может быть удален только от родителей.Поэтому я исправил проблему, заменив CascadeType.ALL на CascadeType.REMOVE.

РЕДАКТИРОВАТЬ: я не знаю, если это точное объяснение, но это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...