Java 从JPA/JDO到对象化的OneToMany
我正在从Datanucleus转移到Objectify。如何为Objectify重写以下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,因此它不是一个键。基本上,
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
}