Насколько я понимаю, функция «ON DELETE CASCADE», на которую вы ссылаетесь, является триггером базы данных. Hibernate не настраивает триггеры. Используя аннотации, Hibernate будет управлять удалением дочерних объектов, используя стандартные операторы SELECT и DELETE. Если вы включите отладку, вы увидите, что это происходит. Когда вы впервые начинаете использовать hibernate, это выглядит пугающе неэффективно, поэтому именно тогда вы и захотите использовать массовое удаление через HQL, на которое вы ссылаетесь.
Таким образом, создание таблиц не добавит специфические функции базы данных, такие как триггеры. Если вы хотите иметь возможность удалять дочерние объекты, попробуйте что-то подобное в зависимости от ваших требований
@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)
private List<Case> cases = new ArrayList<Case>();
При непосредственном использовании HQL он обходит каскадную логику, поэтому вам может потребоваться написать собственный код «очистки», который периодически запускается для очистки orhapns и т. Д. Для эффективности я решил написать для этой цели хранимую процедуру.
Альтернативой является извлечение коллекции родительских объектов, которые вы хотите удалить, и просмотр их по одному. Если ваша коллекция большая, это неэффективно, но, по крайней мере, будет каскадным, как вы определили в аннотации.