Supprimer une entité par clé sans aller chercher d'abord dans le moteur d'application (en utilisant JDO)

StackOverflow https://stackoverflow.com/questions/1692508

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.

Était-ce utile?

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");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top