У меня есть следующий прецедент: есть класс под названием Template, и с этим классом я могу создавать экземпляры класса ActualObject (ActualObject копирует свои исходные данные из Шаблона). Класс Template имеет список Product: s.Скрытие удаленных объектов
Теперь наступает сложная часть, пользователь должен иметь возможность удалять продукты из базы данных, но эти удаления могут не влиять на содержимое шаблона. Другими словами, даже если Продукт удален, Шаблон должен иметь доступ к нему. Это можно решить, добавив флаг «удаленный» в Продукт. Если продукт удален, он может быть не найден явно из базы данных, но он может быть выбран неявно (например, через ссылку в классе Template).
Идея заключается в том, что когда объект ActualObject создается из шаблона, пользователь уведомляется в пользовательском интерфейсе, что «у шаблона X был продукт Z с параметрами A, B и C, но этот продукт был удалены и не могут быть добавлены как таковые в ActualObject Z ".
Моя проблема заключается в том, как я должен пометить эти удаленные объекты как удаленные. Прежде чем кто-то подскажет, что просто обновить флаг удаления вместо выполнения фактического запроса на удаление, моя проблема не так проста. Флаг удаления и его поведение должны существовать во всех POJO, а не только в Product. Это означает, что я получаю проблемы с каскадом. Например, если я удалю шаблон, то продукты также должны быть удалены, и каждый Продукт имеет ссылку на Price-объект, который также должен быть удален, и каждая Цена может иметь ссылку на объект НДС и т. Д. Все эти каскадные объекты должны быть помечены как удаленные.
Вопрос в том, как я могу сделать это разумным образом. Прохождение каждого объекта (который удаляется), проверяя каждое поле для ссылок, которые должны быть удалены, через их ссылки и т. Д. Довольно трудоемкий, и ошибки легко проскальзывают.
Я использую Hibernate, мне было интересно, Hibernate будет иметь такие встроенные функции. Еще одна идея, о которой я подумал, заключается в использовании перехватчиков hibernate для изменения фактического запроса на удаление SQL для запроса на обновление (я даже не уверен, что это возможно на 100%). Моя единственная проблема заключается в том, что Hibernate полагается на каскады во внешних ключах, другими словами, каскадные удаления выполняются базой данных, а не спящим.
Зачем вам нужно каскад? Просто отметьте Продукт, а затем из Pojo поместите внешние ключи в Продукт или загрузите из фильтра db удаленным флагом в Продукт. т. Е. Держите делит флаг в одном месте – Mark