Установить каскад в двунаправленном отображении один ко многим - PullRequest
0 голосов
/ 27 марта 2020

Я довольно новичок в спящем режиме и, похоже, не совсем понимаю каскад.

Итак, у меня есть класс Job и Client, и я хочу достичь этого:

  1. Если я удаляю клиента, работа также удаляется
  2. Если я удаляю работу, клиент не удаляется

Моя модель выглядит примерно так Момент:

@Entity
public class Client {
    @Id
    @GeneratedValue
    private Long clientId;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Job> jobs;
}
@Entity
public class Job {
    @Id
    @GeneratedValue
    private Long jobId;
    private String title;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "client_id")
    private Client client;
    // getters, setters and some fields were omitted for brevity
}

Заранее спасибо

1 Ответ

1 голос
/ 28 марта 2020

Используя cascade, вы можете выполнять некоторые операции над объектами транзитивно. Если состояние одного объекта изменено, оно может изменить состояние связанного объекта.

  1. Если УДАЛИТЬ Клиента -> УДАЛИТЬ ВСЕ ассоциированное задание
    Вы можете использовать:

    • @OneToMany(mappedBy="client", cascade = CascadeType.REMOVE) // or you could make all operations to be cascaded with CascadeType.ALL
    • @OneToMany(mappedBy="client", orphanRemoval = true)
      Различия между ними
  2. Если УДАЛИТЬ Задание -> НЕ УДАЛЯТЬ связанный клиент
    Вы должны исключить каскадный тип УДАЛИТЬ, явно перечислив те каскадные типы, которые вам нужны, или вообще не указывать атрибут cascade.

...