使用JDO的谷歌应用引擎的Datamodel示例

时间:2011-04-04 21:32:35

标签: google-app-engine google-cloud-datastore jdo

我一直在尝试使用GWT / GAE / GoogleDatastore学习和创建示例项目。

我只想弄清楚什么是为学习管理系统设计数据模型的最佳方法。让我们以传统方式说以下是实体......

用户
作用

UserCourses

课程
主题
材料

用户是一对一的角色 课程是一对多的科目 主题是一对多的材料 用户是多对多使用用户课程的课程

有人可以指导我在JDO中表示这种情况的最佳方式吗?

--->问题的延伸。

谢谢Shifty,但我完全陷入了无关的关系模式......试图/努力摆脱传统的关系模式。

让我采用简单的主题与材料

我正在尝试以下模型,

@PersistenceCapable(identityType = IdentityType.APPLICATION) 公共课科目{

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;
@Persistent
private List<Materials> materials;

}

公共类材料{

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;
@Persistent
private String materialName;
@Persistent
private String author;
@Persistent
private String materialType;
@Persistent
private String url;

}
当我首先尝试保存材料然后将该对象分配到主题中时遇到问题。在我阅读时,您无法将子项分配给已经持有父项的父项。
有时可以在不分配给主题的情况下添加材料,但稍后可以分配。

1 个答案:

答案 0 :(得分:0)

如果你想与GAE和JDO建立多对多的关系,你必须在模型中存储密钥列表。

用户模型

import java.util.Set;
import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class User {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private Set<Key> courses;
}

课程模型

   import java.util.Set;
    import com.google.appengine.api.datastore.Key;

    @PersistenceCapable
    public class Courses {
        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key key;
        @Persistent
        private Set<Key> users;
    }

这样您就不需要UserCourses类了。

编辑:

如果您使用

@Persistent
private List<Materials> materials;

您使用拥有的关系模型。 这样您就不能先保留模型,然后将其添加到主题模型中并保持主题模型。 只需将非持久性材质添加到主题模型的材质列表中,并保留主题模型。这也将节省材料。

也许我的问题可能不对,但我希望这会有所帮助。

相关问题