Hibernate каскад против ручного удаления - PullRequest
3 голосов
/ 25 сентября 2010

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

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

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

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

1 Ответ

2 голосов
/ 26 сентября 2010

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

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

...