0

我正在使用 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/

谢谢。

4

3 回答 3

2

查看 Key 的 Javadocs。代替公共构造函数,有一个更方便的创建者方法,它需要更少的 <> 泛型类型:

Key<Course> courseKey = Key.create(Course.class, course.getId());
于 2012-12-22T17:02:44.107 回答
1

您可以使用两个键:

  1. 首先是 GAE 低级 com.google.appengine.api.datastore.Key
  2. 第二,物化的com.googlecode.objectify.Key

您可以将两者与 Objectify 一起使用(因为它们最终会转换为低级 API)。

两者都没有公共构造函数,因此您不能new与它们一起使用。

使用低级键,您将使用KeyFactory.createKey("Course", course.getId()). 使用 objectify 键,您将使用com.googlecode.objectify.Key.create(Course.class, course.getId())

于 2012-12-15T12:16:13.210 回答
0

当我们使用 Objectify 时,如果我们需要为 condition(KeyFactory.createKey("Course", course.getId()) 创建任何 Key,在 course 对象中,Id 字段应该用索引指定。它可以正常工作。

于 2012-12-19T08:58:17.520 回答