Посмотрите на этот пример Plnkr
Переменная this
сильно отличается timesCalled
с каждым нажатием кнопки увеличивается только на 1. Ответ на мой личный вопрос:
.click( () => { } )
и
.click(function() { })
создают одинаковое количество функции при использовании в цикле, как вы можете видеть из подсчета Guid в Plnkr.
Вы не делаете ничего плохого. Вы просто не удаляете дочернюю сущность. Вы можете сделать это с помощью явного метода remove () дочернего объекта (в дополнение к тому, что вы делаете) или использовать эту аннотацию, которая вызывает удаление потерянных записей.
Также стоит упомянуть, что CascadeType .DELETE
также не удаляет сирот. Это означает другое. См. JPA CascadeType.ALL не удаляет "сирот".
В основном, чтобы делать это автоматически, вам понадобится это в коллекции в родительском элементе:
org.hibernate.annotations.CascadeType.DELETE_ORPHAN
добавьте, пожалуйста, @onDelete, возможно, это сработает для вас
public class Author
{
@OneToMany(cascade={CascadeType.ALL})
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
List<Book> books;
}
Параметр каскада в аннотации @OneToMany
- это array, вы хотите:
@OneToMany(cascade={CascadeType.ALL, CascadeType.DELETE_ORPHAN})
Попробуйте использовать следующее примечание, если вы хотите поведение «транзитивная зависимость».
@ org.hibernate.annotations.Cascade (CascadeType.DELETE_ORPHAN)
Похоже, вам не хватает аннотации mappedBy . Попробуйте:
public class Book {
@ManyToOne
@NotNull
Author author;
}
public class Author {
@OneToMany(mappedBy="author", cascade={CascadeType.ALL})
List<Book> books;
}