Есть простая идея сэмитировать вставку нового элемента и напечатать дерево, если не выдаст ошибку значит нет цикла, можно вставлять в БД. Думаю вариант рабочий))) но если есть еще варианты будет хорошо.
Да спасибо, думаю решение с отдельным полем мне подойдет. Как-то даже не подумал об этом, думал что есть какой нибудь инструмент у доктрины, который бы предусмотрел такую необходимость, для тех кому не важно сохранение связей.
На сколько я понимаю в этом подходе заложен не только принцип инверсии зависимостей, но и закон Деметры, который наверно и был родителем принципа инверсии зависимостей, и принцип программирования по контракту, в качестве контрактов как раз и выступают интерфейсы.