Как убрать сущность и детей - PullRequest
0 голосов
/ 22 мая 2018

У меня есть одна проблема, чтобы решить.У меня есть две сущности: Action и Logging:

@Entity
public class Action {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    ...other fields
    ...other fields


    @Column
    private Date start;

    @Column
    private Date end;


@Entity
public class Logging {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @ManyToOne
    @JoinColumn(name = "action_id")
    private Action action;

    ..not important fields

    @Column
    private String domain;

    @Column
    private Date date;

Только таблица ведения журнала имеет столбец action_id как FOREIGN KEY.

Одно действие может иметь несколько записей ведения журнала.

Вопрос: как я могу удалить все сущности Action, которые имеют дату до определенной даты и имеют определенный домен (который находится в таблице ведения журнала)?Например

deleteActionByDateAndDomain(LocalDateTime date, String domain)

Регистрирующая сущность является владельцем, верно?Итак, я должен удалить сущность Action, а затем все связанные сущности Logging, например, CASCADING?Или наоборот - сначала удалите все объекты ведения журнала, которые удовлетворяют моим условиям (date before dateX and domain == myDomain передано в качестве параметров)?

Как бы вы это реализовали?Я мог бы, например, удалить сущность Action и все связанные сущности Logging, но в сущности Action нет сущности поля (только в Logging).

Если возможно, я должен использовать интерфейс CrudRepository.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете указать тип каскада для каскадной операции удаления, установив атрибут cascade = CascadeType.REMOVE, но это может вызвать у вас некоторые головные боли, если они используются неправильно:

  • Если вы удалите какую-либо запись по ошибке,потенциально много данных может быть удалено каскадом
  • Приложение может работать медленно из-за большого количества запросов, выполняемых Hibernate ( link )

Итак, если выне хотите, чтобы эти проблемы, вы можете управлять удалением вручную.Когда вы удалите какую-либо запись, вы узнаете, что еще нужно удалить как следствие.Преимущество состоит в том, что у вас больше контроля и вы можете оптимизировать процесс, создавая массовые удаления, если это необходимо.

...