Löschen einer Entität durch Schlüssel, ohne sie zuerst in App Engine zu holen (mit JDO)
-
18-09-2019 - |
Frage
Gibt es eine Möglichkeit, um eine Einheit zu löschen, ohne sie aus dem Datenspeicher zuerst holen zu müssen? Ich gehe davon aus ich schon den Schlüssel oder die ID für das Unternehmen haben.
Ich denke an so etwas wie deleteObjectById
, die einen Analog getObjectById
auf PersistenceManager
sein würde.
Die nächstgelegene ich denken kann, ist Query.deletePersistentAll()
mit (wie gesehen hier ) und eine Abfrage angeben, die nur auf dem Schlüssel beruht, aber ich kann nicht sagen, ob das das Unternehmen holen vor dem Löschen ihm geht.
Dank
EDIT: Ich weiß, wie dies zu tun, das niedrige Niveau API, sowie in dem Python-API. Ich frage mich, ob es einen Weg war es in der JDO-Schicht zu tun.
Lösung
Datanucleus beantwortet meine Frage auf der google-Gruppe :
Nicht wirklich. Das Problem ist, dass ein Objekt Beziehungen haben kann und so, da diese Kaskade von Vorgängen führen kann, hat es in der Regel sein zuerst in den Speicher geladen. Die einzige Situation, in der es nicht brauchen würde wenn die Klasse des Objekts in den Speicher geladen werden sollte gelöscht werden musste keine Beziehungen.
Sie geht in den niedrigen Level-API und Objekte Strahlen weg kann oder nicht haben Auswirkungen auf verwandte Objekte ... vielleicht jemand verantwortlich für es könnte dazu äußern.
Andere Tipps
Ich bin nicht sicher über JDO, aber für Python dies möglich ist, mit einem kleinen Hack. Sie müssen eine neue Instanz mit dem gleichen Schlüssel „erstellen“ und dann löschen. Es wird nur ein einziges Mal die Datenbank getroffen.
instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()
Wie wäre es die Low-Level-API ?
ich denke, DataService.delete(Key)
genau das tun, was Sie brauchen.
Wenn Sie einen Lang als Schlüssel verwenden, wird ned Sie die KeyMaker verwenden zunächst einen Schlüssel zu erstellen.
Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");