更新: 私の場合の問題は、keyfactory.createKey() メソッドを使用して自分で FbUser プライマリ キーを生成していることです。自動生成に変更すると、正常に動作します。しかし、問題は、データがキーの文字列形式であるため、したくないことです。そのため、型を String から Key に手動で変更してから永続化する必要があります。
私は 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)
なぜこれが起こっているのですか?Ps HRD は既に有効になっています。