0

업데이트 : 내 경우에 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가 이미 활성화되어 있습니다.

답변

2

그래서 부모 엔티티가없는 FbUser를 유지 한 다음 나중에 변경하려고하면 GAE Datastore는이를 허용하지 않습니다 (메시지가 매우 명확하게 말한 것처럼). 추측 이외에 주석이 가능하지 않도록 지속성 코드를 제시하지 마십시오.

해결 방법 : 올바르게 (부모님, 자식) 올바르게 유지하거나 으로 유지하십시오..

+0

나는 부모를 존속 시켰습니다. 앱 엔진을 사용하여 자동으로 키를 생성 할 때 모든 것을 지속 할 수 있습니다. 그러나 키에 문자열을 할당하고 Keyfactory.createKey 메서드를 사용하여 키로 변환하면 위의 오류가 발생합니다. 그래서 우리가 이미 가지고있는 코드에 따라 나에게 최선의 선택이 아닐지라도, 자동 키 생성을 사용하여 그 방식을 그대로 두었습니다. – Sara