java - Google App Engine 中的自有关系不起作用

标签 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,所以这可能是非常明显的!

提前致谢!

最佳答案

您应该知道 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/

相关文章:

java - 为什么 jaxb 2.2 无法处理元素及其子元素具有相同 ID 的情况?

java - 不带括号的通用静态方法,例如在 JavaFX 8 中

java - 使用gradle从spring boot 1.5.3构建可执行文件.jar

Tomcat 上的 Java 持久性 - 没有名为 EntityManager 的持久性提供程序

java - 使用工厂创建 JPA 实体

java - 没有名为 testPU 的 EntityManager 的持久性提供程序

java - 在 GAE 上解析完全有效的 XML 时出现 "Content is not allowed in prolog"

google-app-engine - 应用引擎上的 SSL

node.js - 使用 Nodejs 调整 Google 云存储中的图像大小并提供图像?

Java 持久性/JPA : @Column vs @Basic