我一直在尝试使用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;
}
当我首先尝试保存材料然后将该对象分配到主题中时遇到问题。在我阅读时,您无法将子项分配给已经持有父项的父项。
有时可以在不分配给主题的情况下添加材料,但稍后可以分配。
答案 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;
您使用拥有的关系模型。 这样您就不能先保留模型,然后将其添加到主题模型中并保持主题模型。 只需将非持久性材质添加到主题模型的材质列表中,并保留主题模型。这也将节省材料。
也许我的问题可能不对,但我希望这会有所帮助。