2013-03-08 4 views
6

Sto usando Ormlite per Android per convertire un'applicazione esistente dal file all'archiviazione del database di oggetti. Ho una struttura di dati oggetto abbastanza complessa che ho bisogno di entrare nel database e inizialmente almeno non voglio modificare troppo la struttura dell'oggetto per realizzare questo. In questa struttura esistente ho parecchi livelli di oggetti estranei nidificati.Perché non c'è foreignAutoDelete?

La mia domanda, foreignAutoCreate sembra funzionare piuttosto bene in modo automatico. Quando creo un oggetto nel database che ha oggetti estranei, che hanno oggetti estranei, ecc. Fino a quattro o cinque livelli, la singola creazione per l'oggetto contenente il master compila tutti gli oggetti estranei su tutti questi livelli.

Non credo che ci sia un modo per eliminare l'oggetto master e avere ormlite cascade che elimina tutti i livelli di oggetti esterni contenuti. Voglio confermare che non mi manca qualcosa e non c'è una soluzione più semplice per quello che sto facendo, che utilizza i trigger per cancellare tutto su una cancellazione dalla tabella principale. Capisco che le eliminazioni a cascata sono un'opzione, anche se non riuscivo a farlo funzionare. Ma anche se funzionasse, mi sto ancora interrogando sull'assenza di un'opzione foreignAutoDelete come se avesse una parte della configurazione nel database e alcuni in ormlite potrebbero causare problemi.

In questo momento ho problemi a completare un'opzione di aggiornamento attraverso tutti questi livelli di oggetti estranei. Inizialmente, stavo creando l'oggetto principale e creerebbe tutti i bambini. Vorrei provare ad aggiornare l'oggetto master o eliminare e quindi leggere l'oggetto master, ma non sembra avere un impatto sui bambini (non sono stati aggiornati). Dopo aver aggiunto le eliminazioni a cascata, ho ipotizzato che l'eliminazione dell'oggetto principale e il collegamento in cascata tra i suoi figli e quindi la lettura dell'oggetto principale effettuassero "l'aggiornamento", tuttavia in questo momento i bambini non vengono aggiunti quando ho letto l'oggetto principale. Sto pensando che ci sia un problema di temporizzazione/transazione con i trigger di eliminazione sulle tabelle figlio che si verificano dopo aver aggiunto nuovamente l'oggetto master. ForeignAutoCreate rimane attivo per tutti gli oggetti figlio, pertanto suppongo che debbano essere compilati nella seconda creazione dell'oggetto master dopo che tutto è stato cancellato dal database.

Spero che la domanda abbia senso e grazie in anticipo per qualsiasi risposta.

+0

perché una domanda così lunga? Mi ci sono voluti 15 minuti per capire di cosa avevi effettivamente bisogno. Penso che RobCroll abbia fornito una soluzione, quindi non ho bisogno di darne una –

risposta

7

Aggiungere un parametro columnDefinition alla dichiarazione di DatabaseField della chiave esterna del child. In questo esempio il documento è genitore. DocumentEntity è il nome della classe ma il nome della tabella è definito come "documento"

@DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade") 
private DocumentEntity document;