[英]Persistent list in JDO (Google App Engine)
我正在使用Java中的Google App Engine和JDO开发用于移动应用程序的服务器端,但是在将对象列表保存到数据库中时遇到一些问题。
我在对话和消息之间有一对多的关系(我正在尝试做一个类似聊天的应用程序)。 对话具有消息列表,并且消息属于对话。 当我进行对话的持久化时,如果使用ID获得相同的对话,则一切都很好,并且返回列表和消息。 但是,如果我关闭PersistenceManager的该实例,并尝试使用另一种方法进行对话,则对话一切正常(诸如hour,idUser等属性),但消息列表为null。 无论我做了什么更改,该列表始终为空。
这是我的代码:
Conversation.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;
}
}
Message.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;
您没有说明如何从数据存储中检索对象以及访问列表的位置。 在交易中? 外部交易? 对象处于什么状态? 空心的? 超脱? 检索拥有对象时,列表是否在当前获取组中?
将列表放入当前获取组中。
您不应该实例化实体列表成员。 在Jo的注释工具中完成列表的列表化,并将反射作为jpa实现的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.