在Green-DAO中处理Bi方向1:m的正确方法

时间:2012-12-12 09:17:24

标签: android android-sqlite greendao

在处理Bi Directional 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吗?

1 个答案:

答案 0 :(得分: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);

official documentation on relations中有一节“解决和更新多对多关系”,提供了一些背景信息。