Удалить все ведомые с объектом в HQL - PullRequest
0 голосов
/ 08 февраля 2019

Я использую следующий HQL-запрос, чтобы удалить конкретный объект в моей базе данных.

delete from com.ranking.Footballclub where id = 1

Проблема, с которой я сталкиваюсь, когда я это делаю, нарушает внешний ключ.

Причина: com.microsoft.sqlserver.jdbc.SQLServerException: оператор DELETE конфликтует с ограничением REFERENCE "FK_VKLC3OLNFZIT2FCYMMKDO2ERZ4".Конфликт произошел в базе данных "спорт", таблица "dbo.FOOTBALL_PLAYER", столбец "CLUB_ID"

В спортивных командах есть подчиненные игроки.Я мог бы сначала удалить всех игроков, прежде чем удалить Футбольный клубНо футбольный клуб имеет больше, чем просто игроки.Например, у него есть список сотрудников, переводов, ... Их внешние ключи также сломаются.

Для этого случая я ищу что-то в HQL, чтобы удалить все подчиненные поля в 1 операторе.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете явно установить ON DELETE CASCADE в базе данных или отметить необходимую дочернюю сущность аннотацией @org.hibernate.annotations.OnDelete.

. Она автоматически добавит при удалении к схемево время генерации схемы.как -

@OneToMany(fetch = FetchType.EAGER, mappedBy = "YOUR_PARENT", 
            cascade = CascadeType.REMOVE)    
 @org.hibernate.annotations.OnDelete(
            action = @org.hibernate.annotations.OnDeleteAction.CASCADE)
 private List<YOUR_CHILD> CHILDS;
0 голосов
/ 08 февраля 2019

Вы можете использовать только аннотацию @OneToMany (cascade = CascadeType.REMOVE) в вашей организации и удалить ее через менеджер сущностей.Нет никакой возможности сделать это с помощью hql.Или используйте ограничение в вашем DDL (каскад удаления внешнего ключа);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...