Удалить объект по ключу, не извлекая его сначала в App engine (с помощью JDO)
Есть ли способ удалить объект без необходимости сначала извлекать его из хранилища данных? Я предполагаю, что у меня уже есть ключ или идентификатор для сущности.
Я думаю о чем-то вроде deleteObjectById
, что было бы аналогом getObjectById
на PersistenceManager
.
Самое близкое, что я могу придумать, - это использование Query.deletePersistentAll()
(Как видно здесь) и указание запроса, который полагается только на ключ, но я не могу сказать, будет ли он извлекать сущность перед ее удалением.
Спасибо
EDIT: я знаю, как это сделать это использование низкоуровневого API, а также в API python. Мне было интересно, есть ли способ сделать это в слое JDO.
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");