Google говорит, что JDO не выполняет каскадное удаление из хранилища данных. Так как вы это делаете?

1

Google говорит:

Примечание. Реализация JDO выполняет работу по удалению зависимых дочерних объектов, а не хранилища данных. Если вы удаляете родительский объект с использованием низкоуровневого API или консоли администратора, связанные дочерние объекты не будут удалены.

Итак, как я могу удалить объект, у которого есть дочерние сущности, которые являются ArrayList???

Не должно ли это быть основной особенностью - удалить зависимые дочерние сущности из родительского объекта?

Теги:
google-app-engine
jdo

2 ответа

4

Он не говорит, что JDO не выполняет каскадирование зависимых детей. Фактически, он говорит, что он действительно делает их, но это код в JDO, который делает это. Таким образом, если вы напрямую касаетесь базы данных (инструмент SQL или admin), зависимые дети не будут удалены.

  • 0
    Используя низкоуровневый API, я удаляю () родительский объект, но потомки не удаляются.
  • 0
    Используете ли вы метод delete () объекта? Потому что, теоретически, это должно удалить и детей тоже. По крайней мере, я так понимаю, если дочерние элементы определены таким образом, что они автоматически удаляются, если родительские.
0

Я действительно решил это, получив всех зависимых детей в отдельных запросах и удалив их. Просто удаление родительского элемента не удаляло зависимых детей из хранилища данных.

Это было выполнено с помощью функции setAncestor()

    // delete all children phrases

    Query phrase = new Query("Phrase");
    phrase.setAncestor(parentKey);
    results = datastore.prepare(phrase).asList(FetchOptions.Builder.withDefaults());
    for (Entity result : results)
        datastore.delete(result.getKey());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню