2012-12-12 13 views
5

Jaki jest poprawny sposób wstawiania nowego obiektu do DB Green-DAO w przypadku relacji dwukierunkowej 1: m?Prawidłowy sposób obsługi dwukierunkowego 1: m na zielono - DAO

Powiedzmy, że mam aplikację do czatu, która ma encję konwersacji i encję wiadomości. każda rozmowa ma listę wiadomości, a każda wiadomość ma rozmowę nadrzędną.

co zrobić już teraz jest:

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

wydaje mi się, że nie robię tego poprawnie i chciałbym dostać jakąś reklamę wytyczne do właściwego sposób to zrobić.

z góry dzięki ...

EDIT:
jak widać z mojego komentarza, po próby wykonania kodu sposób napisałem tutaj, otrzymuję null zamiast rozmowy byłem próbuje połączyć.
zmieniłem mojego kodu trochę i teraz wygląda to tak:

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

ale znowu, mój problem jest to, że nie jestem pewien, że połączenie jest teraz dwukierunkowa.
czy powinienem zaktualizować wątkiDao?

Odpowiedz

0

Spróbuj to tak:

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

W official documentation on relations znajduje się sekcja „Rozwiązywanie problemów i aktualizacja do wielu Relations” daje pewne informacje na ten temat tła.

+0

Muszę powiedzieć, że to nie działa w prawdziwym życiu, próbowałem tego w moim kodzie, a wynikiem 'msg.getConverstaion()' było 'null'. Musiałem użyć 'msg.setConversation (conv)' – thepoosh

+0

Czy wywołałeś msg.getConversation() przed lub po wstawieniu encji za pomocą DAO? –

+0

Tak, poszedłem dokładnie to, co jest napisane w dokumentacji, ale dostałem wartość zerową. użyłem 'msg.setConversation' i zadziałało, nie jestem pewien, czy zadziałał inny kierunek, i to jest podstawą mojego pytania – thepoosh

Powiązane problemy