我正在开发一个 Google App Engine 项目,并且正在努力让 JDO 中的关系正常工作。对象已正确保存,但相关对象不会显示在数据存储查看器或查询中。
我的代码的修剪示例是:
@PersistenceCapable
public class Project implements Persistable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent(defaultFetchGroup = "true")
private Client client;
// Extra fields and getter and setters remove
}
@PersistenceCapable
public class Client implements Persistable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
Representation r = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
XMLToObject p = new XMLToObject(new org.everglade.tempus.persistence.dataobjects.Project());
p.parse(xml);
org.everglade.tempus.persistence.dataobjects.Project proj = (org.everglade.tempus.persistence.dataobjects.Project) p.getObject();
pm.makePersistent(proj);
getResponse().setStatus(Status.SUCCESS_CREATED);
getResponse().setLocationRef("/project/" + KeyFactory.keyToString(proj.getId()));
} catch (Exception e) { // Add finer exception handling here so can alter status based on what went wrong!
getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
Log.severe("The following error occurred whilst trying to add a new project: " + e.getMessage());
} finally {
pm.close();
}
项目对象已保存,但没有客户端与之关联 - 谁能明白为什么?这是我在应用程序引擎上的第一个应用程序,也使用 JDO,所以这可能是非常明显的!
提前致谢!
最佳答案
您应该知道 App Engine 上的自有关系与 JDO 规范有很大不同。拥有的关系实际上创建了一个实体组,它是一个存储图。更多信息请点击 http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html
因此,在大多数情况下,在应用程序引擎上,您最好通过 Key 引用其他对象。除非您真的想定义实体组图。同样,我建议您避免大型继承树(上面相同引用链接中的信息)。
关于java - Google App Engine 中的自有关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144370/