0
更新:我發現在我的情況下,問題是我自己使用keyfactory.createKey()方法生成FbUser主鍵。如果我將其更改爲自動生成,則可以正常工作。但問題是我不想,因爲我的數據是字符串格式的關鍵。所以我需要手動將字符串類型更改爲鍵,然後保留它。
我正在使用Google App Engine JPA,並嘗試在我的實體之間建立oneToMany關係。
@Entity
public class DummyParent{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//@Unowned
@OneToMany(targetEntity=FbUser.class, mappedBy="dummyP", fetch=FetchType.LAZY, cascade = CascadeType.ALL)
private ArrayList<FbUser> users;
}
這裏FbUser爲孩子:
@Entity
public class FbUser {
@Id
private Key id;
private String name;
@ManyToOne(fetch=FetchType.LAZY)
private DummyParent dummyP;
}
所以之後,我實例化父類設置其ID和設置用戶。但我收到以下例外情況:
Caused by: com.google.appengine.datanucleus.EntityUtils$ChildWithoutParentException: Detected attempt to establish DummyParent(no-id-yet) as the parent of FbUser("1322222") but the entity identified by FbUser("1322222") has already been persisted without a parent. A parent cannot be established or changed once an object has been persisted.
at com.google.appengine.datanucleus.EntityUtils.extractChildKey(EntityUtils.java:939)
at com.google.appengine.datanucleus.StoreFieldManager.getDatastoreObjectForCollection(StoreFieldManager.java:967)
at com.google.appengine.datanucleus.StoreFieldManager.storeFieldInEntity(StoreFieldManager.java:394)
任何想法爲什麼會發生這種情況? P.s. HRD已啓用。
我堅持父母。使用應用引擎自動生成密鑰時,我能夠堅持這一切。但是當涉及到將鍵分配爲字符串,然後使用Keyfactory.createKey方法將其轉換爲Key時,則會引發上述錯誤。所以我只是把它放在了原來的位置上,並使用了自動密鑰生成功能,儘管根據我們已有的代碼,這可能不是我的最佳選擇。 – Sara 2013-04-23 01:00:30