Hibernate удаление сирот при обновлении коллекции

Посмотрите на этот пример Plnkr

Переменная this сильно отличается timesCalled с каждым нажатием кнопки увеличивается только на 1. Ответ на мой личный вопрос:

.click( () => { } )

и

.click(function() { })

создают одинаковое количество функции при использовании в цикле, как вы можете видеть из подсчета Guid в Plnkr.

30
задан naXa 26 January 2017 в 09:54
поделиться

5 ответов

Вы не делаете ничего плохого. Вы просто не удаляете дочернюю сущность. Вы можете сделать это с помощью явного метода remove () дочернего объекта (в дополнение к тому, что вы делаете) или использовать эту аннотацию, которая вызывает удаление потерянных записей.

Также стоит упомянуть, что CascadeType .DELETE также не удаляет сирот. Это означает другое. См. JPA CascadeType.ALL не удаляет "сирот".

В основном, чтобы делать это автоматически, вам понадобится это в коллекции в родительском элементе:

org.hibernate.annotations.CascadeType.DELETE_ORPHAN
19
ответ дан 27 November 2019 в 23:39
поделиться

добавьте, пожалуйста, @onDelete, возможно, это сработает для вас

public class Author
{
    @OneToMany(cascade={CascadeType.ALL})
    @OnDelete(action = OnDeleteAction.CASCADE)
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    List<Book> books;
}
0
ответ дан 27 November 2019 в 23:39
поделиться

Параметр каскада в аннотации @OneToMany - это array, вы хотите:

@OneToMany(cascade={CascadeType.ALL, CascadeType.DELETE_ORPHAN})
3
ответ дан 27 November 2019 в 23:39
поделиться

Попробуйте использовать следующее примечание, если вы хотите поведение «транзитивная зависимость».

@ org.hibernate.annotations.Cascade (CascadeType.DELETE_ORPHAN)

0
ответ дан 27 November 2019 в 23:39
поделиться

Похоже, вам не хватает аннотации mappedBy . Попробуйте:

public class Book {
  @ManyToOne
  @NotNull
  Author author;
}
public class Author {
  @OneToMany(mappedBy="author", cascade={CascadeType.ALL})
  List<Book> books;
}
0
ответ дан 27 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: