Удалить объект по ключу, не извлекая его сначала в app engine (используя JDO)

StackOverflow https://stackoverflow.com/questions/1692508

Вопрос

Есть ли способ удалить объект без необходимости сначала извлекать его из хранилища данных?Я предполагаю, что у меня уже есть ключ или идентификатор для объекта.Я думаю о чем-то вроде deleteObjectById это было бы аналогом getObjectById вкл . PersistenceManager.

Самое близкое, что я могу придумать, - это использовать Query.deletePersistentAll() (как видно здесь) и указание запроса, который полагается только на ключ, но я не могу сказать, будет ли это извлекать объект перед его удалением.

Спасибо

Редактировать:Я знаю, как это сделать, используя низкоуровневый API, а также в python API.Мне было интересно, есть ли способ сделать это на уровне JDO.

Это было полезно?

Решение

datanucleus ответил на мой вопрос по группа Google:

Не совсем.Проблема в том, что объект может иметь отношения, и поэтому, поскольку они могут вызывать каскад операций, обычно он должен быть сначала загружен в память.Единственная ситуация, когда его не нужно было бы загружать в память, была бы, если бы класс удаляемого объекта не имел связей.

Переход к низкоуровневому API и удаление объектов может повлиять, а может и не повлиять на связанные объекты...возможно, кто-то, ответственный за это, мог бы прокомментировать это.

Другие советы

Я не уверен насчет JDO, но для Python это возможно с помощью небольшого хака.Вам нужно «создать» новый экземпляр с тем же ключом, а затем удалить его.Он попадет в базу данных только один раз.

instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()

Как насчет использования Низкоуровневый API?

Я думаю DataService.delete(Key) сделает именно то, что вам нужно.

Если вы используете ключ Long as, вам нужно будет сначала использовать KeyMaker для создания ключа.

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top