Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JPA/JDO到对象化的OneToMany_Java_Google App Engine_Google Cloud Datastore_Objectify - Fatal编程技术网

Java 从JPA/JDO到对象化的OneToMany

Java 从JPA/JDO到对象化的OneToMany,java,google-app-engine,google-cloud-datastore,objectify,Java,Google App Engine,Google Cloud Datastore,Objectify,我正在从Datanucleus转移到Objectify。如何为Objectify重写以下OneToMany代码 @Entity public class Person{ … @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set<Dog> dogs = new HashSet<Dog>(); … } 顺便说一下,uid没有注释为@Id,因此它不是一个键。基本上,

我正在从Datanucleus转移到Objectify。如何为Objectify重写以下
OneToMany
代码

@Entity
public class Person{
  …
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Set<Dog> dogs = new HashSet<Dog>();
  …
}

顺便说一下,
uid
没有注释为
@Id
,因此它不是一个键。

基本上,如果你想让一个对象a“有很多”对象B,你必须使a有一个字段,其中包含指向B-s的指针(键)列表。这在官方目标文件[1]中有描述


[1]

这意味着,当我需要时,我必须随后按键查询B的每个元素。
@Container
标记如何?解释中没有太多细节。这能满足我的目的吗?你的第一句话是:是的,你需要这样做。请记住,数据存储不是关系数据库。第二条评论:我想说没有。
@container
标签只有在您使用时才有意义。我看不出这个计划对你有什么用处。此外,
@Container
字段不会持久保存在本机数据存储中。它们仅在加载实体时填充。
public Person findById(String uid) {
  EntityManager mgr = getEntityManager();
  try {
    String jpql = "SELECT a FROM Person a WHERE a.uid = :uid";
    TypedQuery<Person> q = mgr.createQuery(jpql, Person.class);
    q.setParameter("uid", uid);
    return q.getSingleResult();
  } catch (Exception e) {// entityNotFoundException or NoResultException
    return null;
  } finally {
    mgr.close();
  }
}
Person owner = personDao.findById(id.getUid());
for (Dog dog : owner.getDogs()) {
  //… do stuff
}