2010-09-25 4 views
3

Я использую Hibernate и несколько раз выполнял каскадную операцию DELETE от родительского объекта до его дочерних элементов. Я использовал следующие два варианта.Hibernate cascade vs manual delete

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

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

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

ответ

2

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

Я использую каскадирование, когда у меня есть реальный состав соотношения (и хочет удалить относительно небольшое количества записей). Тем не менее, я бы не вводил такое отношение только для реализации удаления, но использовал запрос (массив HQL DELETE или собственный SQL-запрос). По моему опыту, преимущества перевешивают «стоимость» требуемого дополнительного кода (что в любом случае мало).