2012-12-12 10 views
5

qual è il modo corretto di inserire un nuovo oggetto in un DB DAO verde quando si ha a che fare con una relazione bidirezionale 1: m?Modo corretto per gestire Bi direzionale 1: m in Green-DAO

Diciamo, ho un'applicazione di chat che ha un'entità di conversazione e un'entità di messaggio. ogni conversazione ha un elenco di messaggi e ogni messaggio ha una conversazione principale.

quello che faccio fin d'ora è:

Conversation conv = new Conversation(); 
ConversationDao.insert(conv); 
List<Message> list = conv.getMessageList(); 

Message msg = new Message(); 
MessageDao.insert(msg); 

msg.setParent(conv.getId()); 
list.add(msg); 
// SHOULD I UPDATE THE CONVERSATION IN THE DB??? 

mi sembra come se io non sto facendo questo in modo corretto e mi piacerebbe avere un po 'ad una guida per il modo corretto per farlo.

grazie in anticipo ...

EDIT:
come si può vedere dal mio commento, dopo aver cercato di implementare il codice il modo in cui ho scritto qui, ho un null al posto della conversazione ero cercando di collegare.
Ho cambiato il mio codice un po 'e ora sembra che questo:

private static void linkMessageToAuthorAndParent(Message messageObj, Thread parent) { 
    List<Message> threadsMessages = parent.getMessageList(); 
    messageObj.setThread(parent); 

    messageDao.insert(messageObj); 

    threadsMessages.add(messageObj); 
    Log.d("DtabaseHelper.parseMessage", "message was inserted"); 
} 

ma ancora una volta, il mio problema è che io non sono che la connessione è ora bidirezionale.
dovrei aggiornare i thread di collegamento ora?

risposta

0

Prova in questo modo:

Conversation conv = new Conversation(); 
ConversationDao.insert(conv); 
List<Message> list = conv.getMessageList(); 

Message msg = new Message(); 
msg.setParent(conv.getId()); // Set FK *before* inserting 
MessageDao.insert(msg); 

list.add(msg); 

Nel official documentation on relations c'è una sezione "Risoluzione e aggiornamento a molti Relazioni" dare alcune informazioni di fondo su questo.

+0

Devo dire che questo non funziona nella vita reale, l'ho provato nel mio codice e il risultato di 'msg.getConverstaion()' era 'null'. Ho dovuto usare 'msg.setConversation (conv)' – thepoosh

+0

Hai chiamato msg.getConversation() prima o dopo che l'entità è stata inserita usando DAO? –

+0

sì, ho seguito esattamente ciò che è scritto nella documentazione, ma ho ottenuto un valore nullo. usato 'msg.setConversation' e ha funzionato, non sono sicuro che l'altra direzione abbia funzionato, e questa è la base della mia domanda – thepoosh

Problemi correlati