5

双方向1:m関係を処理するときに、新しいオブジェクトをGreen-DAO DBに挿入する正しい方法は何ですか?

たとえば、会話エンティティとメッセージエンティティを持つチャットアプリケーションがあるとします。すべての会話にはメッセージのリストがあり、すべてのメッセージには親の会話があります。

私が今していることは次のとおりです。

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

私はこれを正しく行っていないように思えます。これを行う正しい方法についてのガイダンス広告を入手したいと思います。

前もって感謝します...

編集:
私のコメントからわかるように、ここで書いた方法でコードを実装しようnullとすると、リンクしようとしていた会話の代わりになります。
コードを少し変更したところ、次のようになりました。

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

しかし、繰り返しになりますが、私の問題は、接続が双方向になっていることがわからないことです。
今、threadsDaoを更新する必要がありますか?

4

1 に答える 1

0

この方法で試してください:

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

リレーションに関する公式ドキュメントには、「To-Manyリレーションの解決と更新」のセクションがあり、これに関する背景情報が記載されています。

于 2012-12-18T22:02:06.873 に答える