Спящий режим каскада против ручного удаления


Я использую Hibernate и несколько раз должен был реализовать каскадную операцию удаления от родительского объекта к его дочерним объектам. Я использовал следующие два варианта.

Один из вариантов-предоставить getChildren () родительскому объекту, добавить дочерний объект в возвращаемую коллекцию дочерних объектов и разрешить Hibernate автоматически каскадировать удаление. Недостатком этой опции является то, что коллекция getChildren() должна быть открыта, даже если она используется только для поддержки Hibernate каскадирование.

Другой вариант - искать и удалять детей вручную в ParentDao.удалить (родитель). Недостатком этой опции является больше пользовательского кода. Однако этот параметр может работать лучше, если он использует инструкции пакетного удаления.

Какой подход вы чаще всего используете? Видите ли вы другие плюсы и минусы?

1 3

1 ответ:

Какой подход вы чаще всего используете? Видите ли вы другие плюсы и минусы?

Я использую каскадирование, когда у меня есть реальный композиция связь (и требуется удалить относительно небольшое количество записей). Однако я бы не стал вводить такое отношение только для реализации delete, а использовал запрос (bulk HQL DELETE или native SQL query). По моему опыту, преимущества перевешивают "стоимость" дополнительного кода, который требуется (что в любом случае мало).