您可能还记得在my previous question中关于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()

我怀疑这一切的实施对我或绿色机器人来说是个大问题。
这是在Session.runInTx时运行上述代码的问题吗?

最佳答案

这是有问题的部分:

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

message.addToOne(conversation, parentConversation);
conversation.addToMany(message, messages);

对于1:n关系,您必须对toone和tomany关系使用相同的属性。尝试此操作并重新生成代码:
Property parentConversation = message.addLongProperty("parent")
    .getProperty();
message.addToOne(conversation, parentConversation);
conversation.addToMany(message, parentConversation);

07-26 01:51