gpt4 book ai didi

java - JDO (Google App Engine) 中的持久列表

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:22 24 4
gpt4 key购买 nike

我正在使用 Java 中的 Google App Engine 和 JDO 为移动应用程序开发服务器端,但在将对象列表保存到数据库中时遇到了一些问题。

我在 session 和消息之间有一对多的关系(我正在尝试做一个类似聊天的应用程序)。一个 session 有一个消息列表,一个消息属于一个 session 。当我对对话进行 makePersistent 时,如果我得到与 ID 相同的对话,一切都很好,并且列表与消息一起返回。但是,如果我关闭 PersistenceManager 的那个实例并尝试以另一种方法获取对话,则对话一切正常(小时、idUser 等属性),除了消息列表为 null。无论我做什么更改,该列表始终为空。

这是我的代码:

对话.java:

import java.util.LinkedList;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Conversation
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private Long idUser;

@Persistent(mappedBy = "conversation")
private LinkedList<Message> messages;

public Conversation(Long idUser)
{
this.idUser = idUser;

messages = new LinkedList<Message>();
}

public Long getId() {
return id;
}

public Long getIdUser() {
return idUser;
}

public LinkedList<Message> getMessages() {
return messages;
}
}

消息.java:

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.Key;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Message
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;

@Persistent
private Conversation conversation;

@Persistent
private String text;

@Persistent
private String hour;

public Message(String text, String hour)
{
this.text = text;
this.hour = hour;
}

public String getText()
{
return text;
}

public String getHour()
{
return hour;
}

public Key getId()
{
return id;
}

public Conversation getConversation() {
return conversation;
}
}

此外,我尝试单独获取消息,并且成功获取了它们。消息保存良好,但对话中的消息列表丢失。

我希望有人能帮助我,在此先感谢!

编辑:我在使用此代码添加消息后保存对话:

final PersistenceManager persistenceManager = PMF.get().getPersistenceManager();      
final Conversation conversation = new Conversation(idUser1, idUser2);

//Add the messages successfully

try
{
persistenceManager.makePersistent(conversation);
} finally {
persistenceManager.close();
}

我得到了与那个人的对话:

final PersistenceManager persistenceManager = PMF.get().getPersistenceManager();  
Long idConversation;

//Got the idConversation with a query successfully

Conversation conversation = persistenceManager.getObjectById(Conversation.class, idConversation);
return conversation;

最佳答案

您没有说明如何从数据存储中检索对象,以及您访问列表的位置。在交易中?外部交易?对象处于什么状态?空洞的?分离?检索拥有对象时,列表是否在当前提取组中?

将列表放入当前获取组。

关于java - JDO (Google App Engine) 中的持久列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13118786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com