【发布时间】:2010-05-15 21:52:32
【问题描述】:
一旦子实体持久保存在 Google App Engine 上,我就无法加载它们。我确信它们正在保存,因为我可以在数据存储中看到它们。例如,如果我有以下两个实体。
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?
-
这是我一直看到的答案,但据我所知,这是 JDO。我确实在 JPA 中找到了一些关于获取组的信息,或者我想,但 GAE 似乎不支持该示例。我会再看一遍,但我怀疑就是这样。
标签: java google-app-engine jpa persistence google-cloud-datastore