Ответ зависит от того, насколько глубоко вы хотите проверить детей.Если вы беспокоитесь только о непосредственных потомках, то код из @Tiggerizzy должен работать просто отлично.
Если, с другой стороны, вы хотите убедиться, что узел не является непосредственным или глубоким потомком в вашем деревезатем логика должна быть выведена из проверки и помещена в класс обслуживания Grails.Это даст как минимум два преимущества:
- Если изменятся другие свойства в узле, но не структура дерева, вы можете пропустить проверку дочерних элементов и сэкономить себе дополнительное время обработки при проверке.
- Если вы проверяете из-под или в корне дерева, тогда проверка всех дочерних дочерних элементов будет более длительным процессом для большого дерева, требующего большой работы с базой данных.Выполняя эту работу в классе Service, вы получаете транзакционный характер службы, который будет откатывать любые изменения базы данных на необработанном
Exception
, например, в ситуации оптимистической блокировки с другим потоком.