Google App Engine中的所有关系无法正常运行

时间:2011-02-28 16:04:05

标签: java google-app-engine persistence jdo

我正在开发一个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,所以它可能非常明显!

提前致谢!

1 个答案:

答案 0 :(得分:1)

您应该知道App Engine上的拥有关系与JDO规范有很大不同。拥有的关系实际上会创建一个实体组,这是一个存储图。更多信息http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html

因此,在应用程序引擎的大多数情况下,最好通过Key引用其他对象。除非您真的想要定义实体组图。同样,我建议你避免使用大型继承树(上面相同参考链接中的信息)。