2011-02-05 4 views
2

JPA에서 GAE-J의 트랜잭션을 사용하고 싶습니다.JPA를 사용하여 특정 엔티티 그룹에 개체를 만드는 방법은 무엇입니까? (Google AppEngine Java)

Entity child= new Entity("Child", "ParentKey"); 

을하지만 어떻게 JPA로 그것을 할 :

JPA없이

그것은되어야 하는가?

@Entity 
public class Parent{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key id; 
    private String text; 
} 

@Entity 
public class Child{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key id; 
    private Parent parent; 
    private String text; 
} 

시도 ...

Parent parent = new Parent(); 
em.persist(parent); 
em.refresh(parent); 

Child child = new Child(); 
child.setParent(parent); 
em.persist(child); 

이 작동하지 않습니다 : 뒤에서 앞으로 조금 소리

org.datanucleus.store.appengine.DatastoreRelationFieldManager$ChildWithoutParentException: 
Detected attempt to establish Child(130007) as the parent of Parent(132001) but the entity identified by Child(132001) has already been persisted without a parent. A parent cannot be established or changed once an object has been persisted. 

을 ... 내가 멍청이 있습니까? 아니면 쉬운 방법이 있습니까?

감사합니다.

답변

2

케이 ... 첫 번째 시도에서 약간의 오류가 있습니다.

이 작동합니다 :

@Entity 
public class Parent{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key id; 
    private String text; 
    @OneToMany(targetEntity=Child.class, mappedBy="parent", fetch=FetchType.LAZY) 
    private Set<Child> children = new HashSet<Child>(); 
} 

@Entity 
public class Child{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key id; 
    @ManyToOne(fetch=FetchType.LAZY, targetEntity=Parent.class) 
    private Parent parent; 
    private String text; 
} 
+0

이 두 클래스는 나를 위해 증강 오류가 발생합니다. 구글 AppEngine을 증강 : java.lang.NullPointerException이 구글 AppEngine에 증강 :에 의한 org.datanucleus.api.jpa.metadata.JPAAnnotationReader.newMetaDataForMember (JPAAnnotationReader.java:1995) 구글 AppEngine에 증강에 : org.datanucleus.api에서 .jpa.metadata.JPAAnnotationReader.processMemberAnnotations (JPAAnnotationReader.java:1126) – Boris

+0

이제 JPA 2를 설정하면됩니다. 하지만 당신이 다시 협회 없이는 불가능하다고 말하지 않습니까? – Boris

관련 문제