使用Green-DAO保持双向实体

the*_*osh 3 android android-sqlite greendao

你可能记得我之前关于Green DAO双向关系的问题,我的聊天内容包括对话和消息.
每条消息都有一个父对话,对话中有一条消息列表.

当我尝试添加新消息时,只要我不关闭应用程序,它就能完美运行.
这是我用于向现有对话添加消息的代码:

我现在有我的代码执行此操作:

Conversation conv = getConversation();
List<Message> list = conv.getMessageList();

Message msg = new Message();
msg.setConversationId(conv,getId());
MessageDao.insert(msg);


list.add(msg);

conv.update();
// ConversationDao.update(conv);
Run Code Online (Sandbox Code Playgroud)

当我下次打开应用程序并调用时conv.getMessageList(),结果为空ArrayList.

我究竟做错了什么?

编辑:

我改变了我的代码,现在它看起来像这样:

Conversation conv= getCOnversation();

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

conv.resetMessageList();
Run Code Online (Sandbox Code Playgroud)

不幸的是,现在比以往任何时候都更多(即使在同一次运行中),仍然调用conv.getMessageList()返回空java.list.

编辑2:

这里是生成器的代码(这不是真正的代码,而只是对问题很重要的代码.

Entity message = schema.addEntity("Message");
message.addIdProperty().autoincrement();

Entity conversation =schema.addEntity("Conversation");
conversation.addIdProperty().autoincrement();

Property parentConversation = message.addLongProperty("parentConversation")
        .getProperty();
Property messages = conversation.addLongProperty("messages").getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, messages);
Run Code Online (Sandbox Code Playgroud)

编辑3

现在,而不是调用conv.getMessageList();我运行此行,它工作正常.

List<Message> messageList = MessageDao.queryBuilder()
    .where(Properties.parentConversation.eq(conv.getId())
    .list()
Run Code Online (Sandbox Code Playgroud)

我怀疑在实施这一切时对我或greenrobot来说是一个重大问题.

这是运行上面代码的问题Session.runInTx吗?

Mar*_*ger 5

这是有问题的部分:

Property parentConversation = message.addLongProperty("parent")
    .getProperty();
Property messages = conversation.addLongProperty("messages")
    .getProperty();

message.addToOne(conversation, parentConversation);
conversation.addToMany(message, messages);
Run Code Online (Sandbox Code Playgroud)

对于1:N关系,您必须对ToOne和ToMany关系使用相同的属性.试试这个并重新生成代码:

Property parentConversation = message.addLongProperty("parent")
    .getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, parentConversation);
Run Code Online (Sandbox Code Playgroud)