Удалить объект по ключу, не извлекая его сначала в app engine (используя JDO)
-
18-09-2019 - |
Вопрос
Есть ли способ удалить объект без необходимости сначала извлекать его из хранилища данных?Я предполагаю, что у меня уже есть ключ или идентификатор для объекта.Я думаю о чем-то вроде 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");