我无法让子实体在Google App Engine上持久保存后加载。我确信他们正在保存,因为我可以在数据存储中看到它们。例如,如果我有以下两个实体。在Google App Engine上使用JPA加载子实体
public class Parent implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String key;
@OneToMany(cascade=CascadeType.ALL)
private List<Child> children = new ArrayList<Child>();
//getters and setters
}
public class Child implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String key;
private String name;
@ManyToOne
private Parent parent;
//getters and setters
}
我可以拯救父母和孩子就好使用下列内容:
Parent parent = new Parent();
Child child = new Child();
child.setName("Child Object");
parent.getChildren().add(child);
em.persist(parent);
然而,当我尝试加载父,然后尝试访问的孩子(我知道GAE延迟加载)我没有得到孩子的记录。
//parent already successfully loaded
parent.getChildren.size(); // this returns 0
我看过教程后的教程,没有任何工作到目前为止。我正在使用SDK的1.3.3.1版本。我已经看到了各种博客甚至App Engine论坛上提到的问题,但答案始终与JDO相关。我做错了什么或者有其他人有这个问题,并解决它的JPA?
你需要确保儿童的列表是在默认的抓取组,还是只是JDO? – Finbarr 2010-05-15 23:22:45
这就是我一直看到的答案,但据我所知,这是JDO。我确实在JPA中找到了一些关于获取组的内容,所以我想但是这个例子似乎没有被GAE支持。我会再看看那个,但我怀疑就是这样。 – 2010-05-16 02:50:08