我無法讓子實體在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