2009-11-07 2 views
3

Existe-t-il un moyen de supprimer une entité sans avoir à la récupérer dans le magasin de données? Je suppose que j'ai déjà la clé ou l'identifiant pour l'entité. Je pense à quelque chose comme deleteObjectById qui serait un analogue à getObjectById sur PersistenceManager. Le plus proche que je peux penser est en utilisant Query.deletePersistentAll() (comme vu here) et en spécifiant une requête qui repose uniquement sur la clé, mais je ne peux pas dire si cela va aller chercher l'entité avant de la supprimer.Supprimer une entité par clé sans la récupérer d'abord dans le moteur de l'application (à l'aide de JDO)

grâce

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 un moyen de le faire dans la couche JDO.

Répondre

2

DataNucleus a répondu à ma question sur la google group:

Pas vraiment. Le problème est qu'un objet peut avoir des relations et ainsi, étant donné que ceux-ci peuvent causer une cascade d'opérations, il doit généralement être chargé en mémoire en premier. La seule situation où il n'aurait pas besoin d'être chargé en mémoire était si la classe de l'objet à supprimer avait aucune relation. Aller dans l'API de bas niveau et dynamiter les objets peut avoir ou non un impact sur des objets connexes ... peut-être quelqu'un responsable de il pourrait commenter à ce sujet.

0

Comment utiliser le Low-level API? Je pense que DataService.delete(Key) fera exactement ce dont vous avez besoin. Si vous utilisez une clé longue comme, vous devrez utiliser le KeyMaker pour créer une clé en premier.

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "[email protected]"); 
+0

Je sais la fonctionnalité existe dans le datastore, je suis en train de déterminer si je peux y accéder à partir de la couche JDO. –

2

Je ne suis pas sûr de JDO, mais pour Python c'est possible avec un petit hack. Vous devez "créer" une nouvelle instance avec la même clé, puis la supprimer. Il ne frappera la base de données qu'une seule fois.

instance = Model(key=key_to_delete, required_property='dummy') 
instance.delete() 
Questions connexes