В вашем случае вы генерируете базу данных из классов. Это будет означать, что вы не будете использовать базу данных для других целей (поскольку это заставит вас иметь сценарии DDL). Это означает, что это правило, реализованное в базе данных или в коде Java, не имеет значения.
Мы также знаем, что Hibernate вызовет временное исключение в случае, когда один удалит один или несколько статусов и попытается ссылаться на него при фиксации без каскада.
Также база данных будет сгенерирована с использованием ограничения внешнего ключа.
Все это означает, что ограничение ДОЛЖНО соблюдаться, чтобы приложение работало.
Если ваши сущности находятся в банке сами по себе, вы можете добавить временный метод к сигналу тревоги или интерфейсу состояния, чтобы удалить состояние при соблюдении правила.
Кроме того, программисты при использовании сущностей будут вынуждены соблюдать правило, иначе код не будет работать. Но чтобы упростить задачу, вы можете сделать отношение двунаправленным, чтобы упростить задачу отслеживания аварийных сигналов по статусам.
Если вы можете, используйте перехватчик / прослушиватель ondelete, чтобы установить для свойства alarm.status значение null.