Eliminare un'entità da chiave senza averlo scaricato la prima volta nel motore di app (tramite JDO)
-
18-09-2019 - |
Domanda
C'è un modo per eliminare un'entità senza dover prendere dal datastore prima? Io parto dal presupposto che ho già la chiave o l'ID per l'entità.
Sto pensando a qualcosa di simile deleteObjectById
che sarebbe un analogo a getObjectById
su PersistenceManager
.
Il più vicino mi viene in mente sta usando Query.deletePersistentAll()
(come si vede qui ) e specificando una query che si basa solo sulla chiave, ma non posso dire se questo sta per recuperare l'entità prima di eliminarlo.
grazie
EDIT: io so come farlo utilizzando l'API di basso livello, così come nelle API di Python. Mi chiedevo se ci fosse un modo per farlo all'interno dello strato di JDO.
Soluzione
DataNucleus risposto alla mia domanda sul gruppo Google :
Non proprio. Il problema è che un oggetto può avere rapporti e così, poiché questi possono causare cascata di operazioni, deve tipicamente essere caricato in memoria prima. L'unica situazione in cui non avrebbe bisogno di essere caricato in memoria era se la classe dell'oggetto da eliminare avuto nessuna relazione.
Andando in basso API livello e saltare via oggetti può o non può avere un impatto su oggetti correlati ... forse qualcuno responsabile si potrebbe esprimere giudizi.
Altri suggerimenti
Non sono sicuro di JDO, ma per Python questo è possibile con un piccolo hack. È necessario "creare" una nuova istanza con la stessa chiave e quindi eliminarlo. Sarà colpito il database solo una volta.
instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()
Come sull'utilizzo del basso livello di API ?
Credo DataService.delete(Key)
farà esattamente quello che ti serve.
Se si utilizza un lungo come la chiave, si ned utilizzare il fabbricante di chiavi per creare prima una chiave.
Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");