Jason, is it also true that you can't have two one-to-one relationships of the same kind? I'm able to save such a relationship, but when I fetch it, I get the same child in both values. I need to debug further (would not be surprised if it's just something I'm doing wrong), but wondering if it's just a known issue.
On Sep 17, 4:12 pm, "Jason (Google)" <[email protected]> wrote: > This is a known issue. At present, you can't have both a one-to-one and > one-to-many relationship of the same kind. > - Jason > > On Tue, Sep 15, 2009 at 2:57 PM, Tim <[email protected]> wrote: > > > It appears that these two statements work individually but not > > together. > > > �...@persistent > > private ContactInfo manager; > > �...@persistent > > private List<ContactInfo> staff = new ArrayList<ContactInfo>(); > > > Change either @Persistent to @NotPersistent and the unit test > > succeeds. > > > SDK: appengine-java-sdk-1.2.5 > > > ****************** Stack Trace > > *************************************************** > > > java.lang.ClassCastException: oid is not instanceof > > javax.jdo.identity.ObjectIdentity > > at roster.ContactInfo.jdoCopyKeyFieldsFromObjectId(ContactInfo.java) > > at > > > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.setObjectAsValue > > (PersistenceCapableMapping.java:657) > > at > > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.setObject > > (PersistenceCapableMapping.java:364) > > at org.datanucleus.store.appengine.DatastoreRelationFieldManager > > $1.setObjectViaMapping(DatastoreRelationFieldManager.java:132) > > at org.datanucleus.store.appengine.DatastoreRelationFieldManager > > $1.apply(DatastoreRelationFieldManager.java:108) > > at > > > org.datanucleus.store.appengine.DatastoreRelationFieldManager.storeRelations > > (DatastoreRelationFieldManager.java:80) > > at > > org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations > > (DatastoreFieldManager.java:795) > > at > > > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProcess > > (DatastorePersistenceHandler.java:288) > > at > > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects > > (DatastorePersistenceHandler.java:241) > > at > > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject > > (DatastorePersistenceHandler.java:225) > > at org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent > > (JDOStateManagerImpl.java:3185) > > at org.datanucleus.state.JDOStateManagerImpl.makePersistent > > (JDOStateManagerImpl.java:3161) > > at org.datanucleus.ObjectManagerImpl.persistObjectInternal > > (ObjectManagerImpl.java:1298) > > at org.datanucleus.ObjectManagerImpl.persistObject > > (ObjectManagerImpl.java:1175) > > at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent > > (JDOPersistenceManager.java:669) > > at org.datanucleus.jdo.JDOPersistenceManager.makePersistent > > (JDOPersistenceManager.java:694) > > at > > testing.TestContactInfo.testTwoRelationShips(TestContactInfo.java: > > 75) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke > > (NativeMethodAccessorImpl.java:39) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke > > (DelegatingMethodAccessorImpl.java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at junit.framework.TestCase.runTest(TestCase.java:164) > > at junit.framework.TestCase.runBare(TestCase.java:130) > > at junit.framework.TestResult$1.protect(TestResult.java:106) > > at junit.framework.TestResult.runProtected(TestResult.java:124) > > at junit.framework.TestResult.run(TestResult.java:109) > > at junit.framework.TestCase.run(TestCase.java:120) > > at > > org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run > > (JUnit3TestReference.java:130) > > at org.eclipse.jdt.internal.junit.runner.TestExecution.run > > (TestExecution.java:38) > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests > > (RemoteTestRunner.java:467) > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests > > (RemoteTestRunner.java:683) > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run > > (RemoteTestRunner.java:390) > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main > > (RemoteTestRunner.java:197) > > *************************ContactInfo.java ************************* > > import javax.jdo.annotations.IdGeneratorStrategy; > > import javax.jdo.annotations.IdentityType; > > import javax.jdo.annotations.PersistenceCapable; > > import javax.jdo.annotations.Persistent; > > import javax.jdo.annotations.PrimaryKey; > > > import com.google.appengine.api.datastore.Key; > > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > > public class ContactInfo { > > > �...@primarykey > > �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > private Key contactInfoKey; > > �...@persistent > > private String firstName; > > �...@persistent > > private String lastName; > > �...@persistent > > private String phoneNumber; > > �...@persistent > > private String emailAddress; > > public ContactInfo(String firstName, String lastName, String > > phoneNumbers, > > String emailAddresses) { > > this.firstName = firstName; > > this.lastName = lastName; > > this.phoneNumber = phoneNumber; > > this.emailAddress = emailAddress; > > } > > public String getFirstName() { > > return firstName; > > } > > public void setFirstName(String firstName) { > > this.firstName = firstName; > > } > > public String getLastName() { > > return lastName; > > } > > public void setLastName(String lastName) { > > this.lastName = lastName; > > } > > public String getPhoneNumber() { > > return phoneNumber; > > } > > public void setPhoneNumber(String phoneNumber) { > > this.phoneNumber = phoneNumber; > > } > > public Key getContactInfoId(){ > > return contactInfoKey; > > }} > > ************************* Two Relationship > > ******************************* > > import java.util.ArrayList; > > import java.util.List; > > > import javax.jdo.annotations.IdGeneratorStrategy; > > import javax.jdo.annotations.IdentityType; > > import javax.jdo.annotations.NotPersistent; > > import javax.jdo.annotations.PersistenceCapable; > > import javax.jdo.annotations.Persistent; > > import javax.jdo.annotations.PrimaryKey; > > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > > public class TwoRelationship { > > �...@primarykey > > �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > private Long id; > > > �...@persistent > > private ContactInfo manager; > > �...@persistent > > private List<ContactInfo> staff = new ArrayList<ContactInfo>(); > > public ContactInfo getManager() { > > return manager; > > } > > public void setManager(ContactInfo manager) { > > this.manager = manager; > > } > > public List<ContactInfo> getStaff() { > > return staff; > > } > > public void setStaff(List<ContactInfo> staff) { > > this.staff = staff; > > } > > > } > > ************************PMF.java *************************** > > import javax.jdo.JDOHelper; > > import javax.jdo.PersistenceManagerFactory; > > > public class PMF { > > private static final PersistenceManagerFactory pmfInstance = > > JDOHelper.getPersistenceManagerFactory("transactions- > > optional"); > > > private PMF() {} > > > public static PersistenceManagerFactory get() { > > return pmfInstance; > > } > > } > > > ************************** unit test ************************** > > public void testTwoRelationShips(){ > > > ContactInfo boss = new ContactInfo("Walt","Disney", "", ""); > > ContactInfo worker = new ContactInfo("Mickey","Mouse", "", > > ""); > > > TwoRelationship tester = new TwoRelationship(); > > tester.setManager(boss); > > tester.getStaff().add(worker); > > > PersistenceManager pm = PMF.get().getPersistenceManager(); > > try { > > pm.makePersistent(tester); > > > }catch(Exception e){ > > e.printStackTrace(); > > } > > finally { > > pm.close(); > > } > > } --~--~---------~--~----~------------~-------~--~----~ 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
