我正在尝试实施简单的GAE服务。特别是我有学生实体和类别实体。每个学生可以关联一个或多个类别。如何使用Objectify创建这种关系?感谢
编辑:这是我的代码。它有效吗?
@Entity
public class Studente {
static long nextID = 17;
public static Key<Studente> key(long id) {
return Key.create(Studente.class, id);
}
List<Key<Categoria>> categorie;
public Studente() {}
@Id Long id;
@Index String nome;
@Index String cognome;
@Index String username;
@Index String password;
public Studente(String nome, String cognome, String username, String password) {
this.nome=nome;
this.cognome=cognome;
this.username=username;
this.password=password;
categorie = new ArrayList<Key<Categoria>>();
}
public static long getNextID() {
return nextID;
}
public static void setNextID(long nextID) {
Studente.nextID = nextID;
}
public List<Key<Categoria>> getCategorie() {
return categorie;
}
public void setCategorie(List<Key<Categoria>> categorie) {
this.categorie = categorie;
}
public void addCategoria(Key<Categoria> k ){
categorie.add(k);
}
}
答案 0 :(得分:1)
在Student
中创建一个包含所有Category
ID(或键)的多值索引字段:
@Entity
public class Category {
@Id
public Long id; // auto-generated Id of the Category
}
@Entity
public class Student {
@Id
public Long id; // auto-generated Id of the Student
@Index
public List<Long> categories; // put Category Ids into this list
}
索引字段可用于查询过滤器,因此您可以搜索属于特定类别的学生。
答案 1 :(得分:0)
我建议让第三个实体对两个实体都有索引引用。这样,您可以轻松查询某个类别中的每个学生,或者查询学生的每个类别。
@Entity
public class Student { /*...*/ }
@Entity
public class Category { /*...*/ }
@Entity
public class StudentCategory {
@Id
private Long id;
@Index
private Ref<Student> student;
@Index
private Ref<Category> category;
/*...*/
}
我们在GAE应用程序中有类似的设置,它为我们提供了很好的服务。