Hi, read the last entry by Ikai Lan in this thread http://groups.google.com/group/google-appengine-java/browse_thread/thread/defc6d14445318b8/75a1e7b5bcbc1bb3#75a1e7b5bcbc1bb3
Maybe you should switch to a 3rd party package instead of JDO that seems to have an uncertain future and represents anyway the majority of the isssues in this group. I personally switched (happily) to Objectify. regards didier On Dec 1, 5:35 pm, clement boret <boret.clem...@gmail.com> wrote: > PLEASE HELP?§ > > On Nov 27, 2:28 pm, clement boret <boret.clem...@gmail.com> wrote: > > > hello. > > I have a problem when trying to update an object that has already been > > saved in the dataStore.... > > An Employee and Contactnfo. One employee has a contactInfo... > > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > @PersistenceCapable(detachable = "true") > > public class Employee implements Serializable { > > > @PrimaryKey > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > private Key key; > > > @Persistent > > private ContactInfo contactInfo = null; > > > public ContactInfo getContactInfo() { > > return contactInfo; > > } > > > public void setContactInfo(ContactInfo contactInfo) { > > this.contactInfo = contactInfo; > > } > > > public Key getKey() { > > return key; > > }} > > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > @PersistenceCapable(detachable = "true") > > public class ContactInfo implements Serializable { > > > @PrimaryKey > > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > private Key key; > > > @Persistent > > private String name; > > > public String getName() { > > return name; > > } > > > public void setName(String name) { > > this.name = name; > > } > > > public Key getKey() { > > return key; > > } > > > public void setKey(Key key) { > > this.key = key; > > }} > > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > /////////////////////////////////////////////////////////////////////////// > > /////////// > > my servlet: > > > public class GreetingServiceImpl extends RemoteServiceServlet > > implements GreetingService { > > > private static final PersistenceManagerFactory pmfInstance = > > JDOHelper.getPersistenceManagerFactory("transactions-optional"); > > > public String greetServer(String input) { > > String result = ""; > > > //step1 create and save an employee in the datastore. > > Key key = storeEmployeeInDatastore(); > > > //step2 retrieve the employee from the datastore and detach it > > Employee detachedEmployee = getDetachedEmployee(key); > > > //step3 modify the detached employee > > ContactInfo contactInfo2 = new ContactInfo(); > > detachedEmployee.setContactInfo(contactInfo2); > > > //step4 save the modified employee... > > updateEmployeeInDataStore(detachedEmployee); > > > return result; > > } > > > /** > > * @return the key of the employee that has been stored > > */ > > private Key storeEmployeeInDatastore() { > > Employee employee = new Employee(); > > ContactInfo contactInfo = new ContactInfo(); > > employee.setContactInfo(contactInfo); > > > //creates a new manager. > > PersistenceManager manager1 = pmfInstance.getPersistenceManager(); > > Key key = null; > > > try { > > manager1.makePersistent(employee); > > key = employee.getKey(); > > } > > catch ( Exception e ) { > > e.printStackTrace(); > > } > > finally { > > //equivalent to manager1.close() > > manager1.close(); > > } > > return key; > > } > > > private Employee getDetachedEmployee(Key key) { > > PersistenceManager manager2 = pmfInstance.getPersistenceManager(); > > Employee attached = manager2.getObjectById(Employee.class, key); > > > Employee detachedEmployee = manager2.detachCopy(attached); > > manager2.close(); > > return detachedEmployee; > > } > > > private void updateEmployeeInDataStore(Employee detachedEmployee) { > > PersistenceManager manager3 = pmfInstance.getPersistenceManager(); > > try { > > > Employee bidon = manager3.makePersistent(detachedEmployee); > > > System.out.println(""); > > } > > catch ( Exception e ) { > > e.printStackTrace(); > > } > > finally { > > manager3.close(); > > } > > } > > > } > > > /////////////////////////////////////////////////////////////////////////// > > //////// > > /////////////////////////////////////////////////////////////////////////// > > //////// > > /////////////////////////////////////////////////////////////////////////// > > //////// > > HERE IS THE ERROR I GET > > org.datanucleus.store.appengine.DatastoreRelationFieldManager > > $ChildWithoutParentException: Detected attempt to establish > > Employee(4) as the parent of ContactInfo(6) but the entity identified > > by ContactInfo(6) has already been persisted without a parent. A > > parent cannot be established or changed once an object has been > > persisted. > > at > > org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(Nuc > > leusJDOHelper.java: > > 354) > > at > > org.datanucleus.jdo.JDOPersistenceManager.close(JDOPersistenceManager.java: > > 281) > > at > > com.gae.server.GreetingServiceImpl.updateEmployeeInDataStore(GreetingServic > > eImpl.java: > > 85) > > at > > com.gae.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java: > > 33) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: > > 39) > > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp > > l.java: > > 25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at > > com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime > > .java: > > 100) > > at > > com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: > > 562) > > > /////////////////////////////////////////////////////////////////////////// > > ///////////// > > > Can Anyone explain me what's wrong... and can anyone explain to me how > > I can do the 4 steps! > > > //step1 create and save an employee in the datastore. > > > //step2 retrieve the employee from the datastore and detach it > > > //step3 modify the detached employee > > > //step4 save the modified employee... > > > Thank you in advance. -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.