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


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

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

Спасибо

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

3 3

3 ответа:

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

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

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

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

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

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

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

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

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");