Supprimer une entité par clé sans aller chercher d'abord dans le moteur d'application (en utilisant JDO)
-
18-09-2019 - |
Question
Y at-il un moyen de supprimer une entité sans avoir à chercher dans le magasin de données en premier? Je suppose que je l'ai déjà la clé ou l'identifiant de l'entité.
Je pense à quelque chose comme deleteObjectById
qui serait un analogue à getObjectById
sur PersistenceManager
.
Le plus proche que je peux penser est d'utiliser Query.deletePersistentAll()
(comme on le voit ) et en spécifiant une requête qui ne repose que sur la clé, mais je ne peux pas dire si cela va chercher l'entité avant de le supprimer.
Merci
EDIT: Je sais comment faire cela en utilisant l'API de bas niveau, ainsi que dans l'API python. Je me demandais s'il y avait une façon de le faire dans la couche JDO.
La solution
DataNucleus a répondu à ma question sur la groupe google :
Pas vraiment. Le problème est qu'un objet peut avoir des relations et ainsi, puisque ceux-ci peuvent provoquer cascade d'opérations, il doit généralement être chargé dans la mémoire premier. La seule situation où il ne serait pas nécessaire de être chargé en mémoire était si la classe de l'objet à supprimer a pas de relations.
Entrant dans l'API de bas niveau et faisant exploser des objets peuvent ou non avoir un impact sur les objets connexes ... peut-être une personne responsable de il pourrait commenter.
Autres conseils
Je ne suis pas sûr de JDO, mais pour Python cela est possible avec un petit hack. Vous avez besoin de « créer » une nouvelle instance avec la même clé, puis supprimez-le. Il frappera la base de données qu'une seule fois.
instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()
Comment l'utilisation de la balise API de bas niveau ?
Je pense que DataService.delete(Key)
va faire exactement ce dont vous avez besoin.
Si vous utilisez un long comme la clé, vous nies d'utiliser le keymaker pour créer une première clé.
Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");