업데이트 : 내 경우에 keyfactory.createKey() 메소드를 사용하여 Fbuser 기본 키를 직접 생성하고 있음을 알았습니다. 만약 내가 그것을 자동으로 작동하도록 잘 변경 작동합니다. 그러나 문제는 내 데이터가 키의 String 형식이기 때문에 원하지 않는 것입니다. 그래서 유형을 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)
이 문제가 발생하는 이유는 무엇입니까? P. HRD가 이미 활성화되어 있습니다.
나는 부모를 존속 시켰습니다. 앱 엔진을 사용하여 자동으로 키를 생성 할 때 모든 것을 지속 할 수 있습니다. 그러나 키에 문자열을 할당하고 Keyfactory.createKey 메서드를 사용하여 키로 변환하면 위의 오류가 발생합니다. 그래서 우리가 이미 가지고있는 코드에 따라 나에게 최선의 선택이 아닐지라도, 자동 키 생성을 사용하여 그 방식을 그대로 두었습니다. – Sara