2012-12-12 10 views
5

Wie ist der richtige Weg ein neues Objekt in eine Green-DAO DB einzufügen, wenn es sich um eine bidirektionale 1: m Beziehung handelt?Korrekter Weg zur Handhabung bidirektionaler 1: m in Grün-DAO

Nehmen wir an, ich habe eine Chat-Anwendung, die eine Conversation-Entity und eine Nachricht Entity hat. Jede Konversation hat eine Liste von Nachrichten und jede Nachricht hat eine übergeordnete Konversation.

ich tun, was ab jetzt:

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??? 

scheint es mir, als ob ich das nicht richtig zu tun und ich würde gerne einige Hinweise Anzeige auf die richtige Art und Weise zu bekommen, dies zu tun.

Dank im Voraus ...

EDIT:
wie aus meinem Kommentar zu sehen, nachdem er versuchte Code, wie ich hier geschrieben zu implementieren, erhalte ich ein null anstelle des Gesprächs war ich versuchen zu verknüpfen.
ich meinen Code ein wenig verändert und jetzt sieht es wie folgt aus:

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"); 
} 

aber wieder, mein Problem ist, dass ich nicht sicher bin, die Verbindung nun bidirektional ist.
sollte ich jetzt das threadsDao aktualisieren?

Antwort

0

es auf diese Weise versuchen:

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); 

Im official documentation on relations gibt es einen Abschnitt „Resolving und Aktualisierung zu-Viele-Beziehungen“ zu diesem Thema einige Hintergrundinformationen geben.

+0

Ich muss sagen, dass dies im wirklichen Leben nicht funktioniert, habe ich dies in meinem Code versucht und das Ergebnis von 'msg.getConverstaion()' war 'null'. Ich musste 'msg.setConversation (conv) verwenden' – thepoosh

+0

Haben Sie msg.getConversation() vor oder nach dem Einfügen der Entität mit dem DAO aufgerufen? –

+0

Ja, ich befolgte genau das, was in der Dokumentation geschrieben wurde, bekam aber einen Nullwert. used 'msg.setConversation' und es hat funktioniert, ich bin nicht sicher, ob die andere Richtung funktioniert hat, und das ist die Grundlage für meine Frage – thepoosh

Verwandte Themen