Некоторые особенности использования Hibernate для мягких удалений сущностей:
Использование аннотаций @SQLDelete и @Where. 14 @SQLDelete принимает нативный SQL-запрос, который выполняется при удалении управляемой Hibernate сущности. 1 @Where принимает условие и автоматически добавляет его к запросам на выборку, позволяя фильтровать сущности на основе атрибута «удалено». 1
Проблемы с ограничениями и индексами. 1 У удалённых и живых сущностей общие уникальные ограничения и индексы. 1 Поэтому создание регулярных индексов больше не работает. 1
Поведение в ассоциациях OneToOne и ManyToOne. 1 Если Hibernate делает отдельный запрос к сущности по id с объявленным @Where, то возникает исключение. 3 Если делается join, то удалённая сущность попадает в результирующий набор данных и спокойно отображается на ассоциации. 3
Избегание EntityNotFoundException. 13 Для этого можно использовать аннотацию @NotFound, которая меняет поведение: вместо исключения в поле ассоциации silently устанавливается null. 1 Однако это может повлиять на производительность приложения: все ассоциации ToOne становятся eagerly fetched, независимо от объявленного типа fetch. 1
Ответ сформирован YandexGPT на основе текстов выбранных сайтов. В нём могут быть неточности.
Примеры полезных ответов Нейро на вопросы из разных сфер. Вопросы сгенерированы нейросетью YandexGPT для актуальных тем, которые определяются на базе обобщённых запросов к Нейро.