【问题标题】:Datamodel sample for google app engine using JDO使用 JDO 的谷歌应用引擎的数据模型示例
【发布时间】:2011-04-04 21:32:34
【问题描述】:

我一直在尝试学习并使用 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;

}
当我尝试先保存材料然后将该对象分配给主题时出现问题。正如我所读到的,您不能将孩子分配给已经在没有父母的情况下持续存在的父母。
有时可以在未分配到主题的情况下添加材料,但可以稍后再分配。

【问题讨论】:

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


    【解决方案1】:

    如果您想与 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;
    

    您使用的是自有关系模型。 这样你就不能先持久化模型,然后将它添加到主题模型并持久化主题模型。 只需将非持久化材料添加到主题模型的材料列表中并持久化主题模型即可。这也将节省材料。

    也许我的问题可能是错误的,但我希望这会有所帮助。

    【讨论】:

    • 已在问题底部添加了有关我的问题的更多详细信息。由于没有,无法在评论中添加它。字数限制。
    • 谢谢,让我试一试。我不确定我是否会取回对象(主题内的材料)。
    • @shifty 我正在与 GAE/J 数据存储中的无主关系作斗争。您能否提供一个示例查询,该查询可以检索具有用户名的所有课程?
    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多