Hi Anita. I don't understand your data model -- if you are modeling the relationship between entities of type A and entities of type B using entities of type C, why do entities of type A have direct references to entities of type B and vice versa?
Either way, the reason you're getting this error is because you're inadvertently attempting to set an owned relationship between entities of types A and B under type C, and doing this tries to modify the keys of types A and B after they've been persisted, which you can't do. Try changing the following: @PersistenceCapable(identityType = IdentityType.APPLICATION) public class TableC implements Serializable{ @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key id; @Persistent private Key tablea; @Persistent private Key tableb; ..... This should just store a reference to the entity's key (unowned relationship) rather than trying to modify the keys of the A and B entities. - Jason On Tue, Sep 15, 2009 at 1:34 AM, Anita <an...@ensarm.com> wrote: > > Hi Jason, > > I could solve my previous problem. But now i am facing some other > problem with many to many relationship tables. > > My schema looks as follows: > > TableA ---> TableC <----- TableB > which means there is many to many relationship between TableA & > TableB. So i want TableA and TableB primary keys into TableC as > foreign key. > > TableA class looks as follows: > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > public class TableA implements Serializable{ > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > private Key id; > ...... > @Persistent(defaultFetchGroup="true") > private Set<Key> tableB = new HashSet<Key>(); > ...... > (some getter & setter) > > TableB class looks as follows: > > @PersistenceCapable(identityType = IdentityType.APPLICATION) > public class TableB implements Serializable{ > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > private Key id; > ...... > @Persistent(defaultFetchGroup="true") > private Set<Key> tableA = new HashSet<Key>(); > ...... > (some getter & setter) > > TableC class looks as follows: > @PersistenceCapable(identityType = IdentityType.APPLICATION) > public class TableC implements Serializable{ > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > private Key id; > > @Persistent > private TableA tablea; > > @Persistent > private TableB tableb; > ..... > (some getter & setter) > > While adding data into TableC i use following code: > > Query query1 = pm.newQuery(TableA.class); > List<TableA> results1 = (List<TableA>) query1.execute(); > TableA tableA= results1.get(0); > > Query query2 = pm.newQuery(TableB.class); > List<TableB> results2 = (List<TableB>) query2.execute(); > TableB tableB= results2.get(0); > > tableA.add(tableB); > tableB.add(tableA); > > At this point TableA and TableB values are getting update but while > entering data into TableC the problem comes. > TableC tableC = new TableC(); > tableC.setTableA(tableA); > tableC.setTableB(tableB); > pm.makePersistent(tableC); --> at this point it gives me "A parent > cannot be established or changed once an object has been persisted." > > Can you please tell me were i am going wrong? > > Thanks > Anita > > On Sep 15, 3:54 am, "Jason (Google)" <apija...@google.com> wrote: > > From the error message, it sounds like the parent isn't getting set > > correctly. You'll need to share some of your code in order for me to help > > you further -- what does your Release class look like and how are you > > persisting it? > > > > - Jason > > > > On Sat, Sep 12, 2009 at 4:36 AM, Anita <an...@ensarm.com> wrote: > > > > > Hi Jason, > > > > > Our schema looks as follows: > > > ProductType 1--------->M Product 1-------->M Release > > > > > Data is inserting into Release table. But while fetching data from > > > release table i am getting following exception: > > > > > Field com.ensarm.server.domain.Release.products should be able to > > > provide a reference to its parent but the entity does not have a > > > parent. Did you perhaps try to establish an instance of > > > com.ensarm.server.domain.Release as the child of an instance of > > > com.ensarm.server.domain.Products after the child had already been > > > persisted? > > > org.datanucleus.exceptions.NucleusUserException: Field > > > com.ensarm.server.domain.Release.products should be able to provide a > > > reference to its parent but the entity does not have a parent. Did > > > you perhaps try to establish an instance of > > > com.ensarm.server.domain.Release as the child of an instance of > > > com.ensarm.server.domain.Products after the child had already been > > > persisted? > > > at > > > > org.datanucleus.store.appengine.DatastoreRelationFieldManager.lookupParent > > > (DatastoreRelationFieldManager.java:302) > > > at > > > > > > org.datanucleus.store.appengine.DatastoreRelationFieldManager.fetchRelationField > > > (DatastoreRelationFieldManager.java:289) > > > at > > > org.datanucleus.store.appengine.DatastoreFieldManager.fetchObjectField > > > (DatastoreFieldManager.java:271) > > > at > org.datanucleus.state.AbstractStateManager.replacingObjectField > > > (AbstractStateManager.java:1197) > > > at > com.ensarm.server.domain.Release.jdoReplaceField(Release.java) > > > at > com.ensarm.server.domain.Release.jdoReplaceFields(Release.java) > > > at org.datanucleus.state.JDOStateManagerImpl.replaceFields > > > (JDOStateManagerImpl.java:2772) > > > at org.datanucleus.state.JDOStateManagerImpl.replaceFields > > > (JDOStateManagerImpl.java:2791) > > > at > > > org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject > > > (DatastorePersistenceHandler.java:349) > > > at > org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo > > > (DatastoreQuery.java:384) > > > at > org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo > > > (DatastoreQuery.java:345) > > > at > org.datanucleus.store.appengine.query.DatastoreQuery.access$700 > > > (DatastoreQuery.java:96) > > > at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply > > > (DatastoreQuery.java:454) > > > at org.datanucleus.store.appengine.query.DatastoreQuery$5.apply > > > (DatastoreQuery.java:453) > > > at > > > org.datanucleus.store.appengine.query.StreamingQueryResult.resolveNext > > > (StreamingQueryResult.java:137) > > > at org.datanucleus.store.appengine.query.StreamingQueryResult > > > $1.computeNext(StreamingQueryResult.java:163) > > > at > > > org.datanucleus.store.appengine.query.AbstractIterator.tryToComputeNext > > > (AbstractIterator.java:132) > > > at > org.datanucleus.store.appengine.query.AbstractIterator.hasNext > > > (AbstractIterator.java:127) > > > at org.datanucleus.store.appengine.query.StreamingQueryResult > > > $AbstractListIterator.hasNext(StreamingQueryResult.java:229) > > > at com.ensarm.server.servlet.GetData.getRelease(GetData.java:87) > > > at com.ensarm.server.servlet.GetData.doGet(GetData.java:32) > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) > > > at > > > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: > > > 487) > > > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > > > (ServletHandler.java:1093) > > > at > > > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter > > > (TransactionCleanupFilter.java:43) > > > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > > > (ServletHandler.java:1084) > > > at > com.google.appengine.tools.development.StaticFileFilter.doFilter > > > (StaticFileFilter.java:124) > > > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter > > > (ServletHandler.java:1084) > > > at org.mortbay.jetty.servlet.ServletHandler.handle > > > (ServletHandler.java:360) > > > at org.mortbay.jetty.security.SecurityHandler.handle > > > (SecurityHandler.java:216) > > > at org.mortbay.jetty.servlet.SessionHandler.handle > > > (SessionHandler.java:181) > > > at org.mortbay.jetty.handler.ContextHandler.handle > > > (ContextHandler.java:712) > > > at > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: > > > 405) > > > at > > > com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle > > > (DevAppEngineWebAppContext.java:54) > > > at org.mortbay.jetty.handler.HandlerWrapper.handle > > > (HandlerWrapper.java:139) > > > at com.google.appengine.tools.development.JettyContainerService > > > $ApiProxyHandler.handle(JettyContainerService.java:313) > > > at org.mortbay.jetty.handler.HandlerWrapper.handle > > > (HandlerWrapper.java:139) > > > at org.mortbay.jetty.Server.handle(Server.java:313) > > > at > > > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: > > > 506) > > > at > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete > > > (HttpConnection.java:830) > > > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) > > > at > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) > > > at > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) > > > at org.mortbay.io.nio.SelectChannelEndPoint.run > > > (SelectChannelEndPoint.java:396) > > > at org.mortbay.thread.BoundedThreadPool$PoolThread.run > > > (BoundedThreadPool.java:442) > > > > > What should be done for this problem? > > > > > Anita > > > --~--~---------~--~----~------------~-------~--~----~ 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-java@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 -~----------~----~----~----~------~----~------~--~---