Я предлагаю вам сначала добавить ограничение внешнего ключа в другие таблицы в базе данных oracle. Поэтому всякий раз, когда какой-либо процесс пытается обнулить внешний ключ, этот процесс завершится неудачей. Теперь преимущество этой ошибки в том, что вы сможете точно отслеживать, где возникает проблема.
Если hibernate испортил данные (что не должно быть в идеале), тогда трассировка исключений покажет классы hibernate в трассировке, иначе, если какой-то триггер базы данных или что-то еще в БД вызывает проблему, вы получите код ошибки SQL в исключении трассировки стека.
Так что, пожалуйста, попробуйте это и дайте нам знать, что вы найдете. Может быть, ты сам получишь ответ.