Обходит ли orphanRemoval onDelete?

Предположим, что у нас есть две сущности ( ---- +: = 0 =: + ---- и ---- +: = 1 =: + ---- ).У профиля может быть много адресов.В этом случае мы имеем:Теперь, если я удалю профиль, у которого много адресов:Как удаляются адреса?Извлекает ли Doctrine все адреса, связанные с этим профилем, а затем удаляет их, или удаляет только профиль и позволяет базе данных обрабатывать адреса?Я нашел несколько ответов о Hibernate , но ничего о Doctrine .РЕДАКТИРОВАТЬ : добавить три примечания из книги доктрины1. Если ассоциация помечена как CASCADE = REMOVE, Doctrine 2 получит эту ассоциацию.Если это единственная ассоциация, она передаст эту сущность в ---- +: = 4 =: + ---- .Если ассоциация является коллекцией, Doctrine перебирает все ее элементы и передает их в ---- +: = 5 =: + ---- .В обоих случаях семантика каскадного удаления применяется рекурсивно.Для больших графов объектов эта стратегия удаления может быть очень дорогостоящей.2. Использование оператора DQL DELETE позволяет удалить несколько сущностей одного типа с помощью одной команды и без гидратации этих сущностей.Это может быть очень эффективным для удаления графов больших объектов из базы данных.3. Использование семантики внешнего ключа onDelete = "CASCADE" может заставить базу данных удалить все связанные объекты внутри.Эту стратегию немного сложно реализовать, но она может быть очень мощной и быстрой.Однако вы должны знать, что использование стратегии 1 ( ---- +: = 6 =: + ---- ) полностью обходит любой внешний ключ ---- +: = 7 =: + ---- параметр ,потому что Doctrine тем не менее будет извлекать и удалять все связанные объекты явно.
7 голосов | спросил ghanbari 19 AMpSun, 19 Apr 2015 00:25:04 +030025Sunday 2015, 00:25:04

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132