Objectify4中的一对多关系

时间:2012-12-15 07:50:51

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

我正在使用带有java的GAE。我只是创建一个包含学生和课程关系的示例应用程序。我有很多分支机构和很多学生。每个分支都可以有很多学生,我试过

    ObjectifyService.register(Course.class);
    ObjectifyService.register(Student.class);
    Course course = new Course();
    course.setName("ss");
    course.setBranch("cs");
    ofy().save().entity(course).now();

    Student stu = new Student();
    stu.setName("student1");
    Key<Course> courseKey = new Key<Course>(Course.class, course.getId()); // getting error here
    stu.setCourse(courseKey);
    System.out.println("saving");
    ofy().save().entity(stu).now();

我不确定如何在objecitfy4中定义这种关系。我按照教程http://www.eteration.com/objectify-an-easy-way-to-use-google-datastore/

进行了操作

感谢。

3 个答案:

答案 0 :(得分:2)

查看Javadocs for Key。而不是公共构造函数,有一个更方便的创建者方法,它需要更少的输入&lt;&gt;泛型:

Key<Course> courseKey = Key.create(Course.class, course.getId());

答案 1 :(得分:1)

您可以使用两个键:

  1. 首先是GAE低级别com.google.appengine.api.datastore.Key
  2. 第二,客观化com.googlecode.objectify.Key
  3. 你可以同时使用Objectify(因为它们最终被转换为低级API)。

    两者都没有公共构造函数,因此您无法使用new

    使用低级别密钥,您可以使用KeyFactory.createKey("Course", course.getId())。 使用objectify键,您可以使用com.googlecode.objectify.Key.create(Course.class, course.getId())

答案 2 :(得分:0)

当我们使用Objectify时,如果我们需要为条件创建任何Key(KeyFactory.createKey(“Course”,course.getId()),在课程对象中,Id字段应该用index指定。它会正常工作