你可能还记得我之前关于 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);
当我下次打开应用程序并调用conv.getMessageList()
时,结果为空ArrayList
。
我究竟做错了什么?
编辑:
我更改了我的代码,现在它看起来像这样:
Conversation conv= getCOnversation();
Message msg = new Message();
msg.setConversation(conv);
MessageDao.insert(msg);
conv.resetMessageList();
不幸的是,现在比以往任何时候(即使在同一次运行中),仍然调用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);
编辑 3
现在,而不是打电话给conv.getMessageList();
我运行这条线,它工作正常。
List<Message> messageList = MessageDao.queryBuilder()
.where(Properties.parentConversation.eq(conv.getId())
.list()
我怀疑我或 greenrobot 在实施这一切时会遇到一个主要问题。
这是同时运行上述代码的问题Session.runInTx
吗?