There is a preview release of the entire 1.2.8 SDK available for _local_ testing available for download at http://code.google.com/p/googleappengine/downloads/list
I realize that won't help you in prod, but if you're not ready to deploy yet anyway you may find it useful. Max On Tue, Nov 24, 2009 at 4:18 PM, Abe Parvand <eparv...@gmail.com> wrote: > I have this exact same problem. So, +1. Temporary workaround? Should > we just omit parent reference in child for now? > > On Nov 23, 2:15 pm, "Max Ross (Google)" > <maxr+appeng...@google.com<maxr%2bappeng...@google.com> > > > wrote: > > Thanks for the report! I've made a lot of fixes since the RC1 build but > > they're not backwards-compatible with the 1.2.6 SDK, so unfortunately I > > can't release them until the next SDK is out. Your test case works for > me > > with my latest build so this will behave correctly in the next release. > > > > Thanks, > > Max > > > > On Mon, Nov 23, 2009 at 1:56 PM, R. A. <ramanauskas.ado...@gmail.com> > wrote: > > > > >http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.4. > .. > > > >> This release provides support for inheritance of native datastore > types > > > and embedded classes. > > > > > Can't get inheritance to run. Tested on *-1.0.3 and *-1.0.4.RC1. > > > Without AbstractEntity, 2 entities with OneToMany relationship works > > > perfectly. Is it the problem with Key id type? NullPointerException > > > is thrown when i access child list element: > > > > > public void test() { > > > List<ParentEntity> parents = tdao.load(); > > > for (ParentEntity pe : parents) { > > > List<ChildEntity> childs = pe.getChilds(); > > > System.out.println(".. childs.size: " + childs.size()); > > > for(ChildEntity ce : childs) { // <----- NPE > > > } > > > } > > > } > > > > > @Entity > > > @MappedSuperclass > > > public abstract class AbstractEntity { > > > > > @Id > > > @GeneratedValue(strategy = GenerationType.IDENTITY) > > > private Key id; > > > > > private String name; > > > ... > > > } > > > > > @Entity > > > public class ParentEntity extends AbstractEntity { > > > > > @OneToMany(mappedBy="parent", cascade=CascadeType.ALL) > > > private List<ChildEntity> childs; > > > ... > > > } > > > > > @Entity > > > public class ChildEntity extends AbstractEntity { > > > > > private Long value; > > > > > @ManyToOne > > > private ParentEntity parent; > > > ... > > > } > > > > > Nov 23, 2009 8:20:34 PM com.google.apphosting.utils.jetty.JettyLogger > > > warn > > > WARNING: Nested in > > > org.springframework.web.util.NestedServletException: Request > > > processing failed; nested exception is java.lang.NullPointerException: > > > java.lang.NullPointerException > > > at > > > > > > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.getObjectForApplicationIdentity > > > (PersistenceCapableMapping.java:971) > > > at > > > > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.getObject > > > (PersistenceCapableMapping.java:720) > > > at > > > > org.datanucleus.store.appengine.DatastoreRelationFieldManager.lookupParent > > > (DatastoreRelationFieldManager.java:309) > > > 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 gae.test.ChildEntity.jdoReplaceField(ChildEntity.java) > > > at gae.test.AbstractEntity.jdoReplaceFields(AbstractEntity.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:443) > > > at > org.datanucleus.store.appengine.query.DatastoreQuery.entityToPojo > > > (DatastoreQuery.java:433) > > > at > > > > > > org.datanucleus.store.appengine.DatastoreElementContainerStoreSpecialization.getChildren > > > (DatastoreElementContainerStoreSpecialization.java:103) > > > at > org.datanucleus.store.appengine.DatastoreFKListStore.listIterator > > > (DatastoreFKListStore.java:47) > > > at > > > org.datanucleus.store.mapped.scostore.AbstractListStore.listIterator > > > (AbstractListStore.java:84) > > > at > org.datanucleus.store.mapped.scostore.AbstractListStore.iterator > > > (AbstractListStore.java:74) > > > at org.datanucleus.sco.backed.List.loadFromStore(List.java:241) > > > at org.datanucleus.sco.backed.List.iterator(List.java:507) > > > at > > > java.util.AbstractCollection.toString(AbstractCollection.java:414) > > > at java.lang.String.valueOf(String.java:2826) > > > at java.lang.StringBuilder.append(StringBuilder.java:115) > > > at gae.test.TestServiceImpl.openParentsWithChilds > > > (TestServiceImpl.java:27) > > > 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 > > > com.google.appengine.tools.development.agent.runtime.Runtime.invoke > > > (Runtime.java:100) > > > at > > > org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection > > > (AopUtils.java:307) > > > at > > > > > > org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint > > > (ReflectiveMethodInvocation.java:183) > > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed > > > (ReflectiveMethodInvocation.java:150) > > > at > > > > org.springframework.transaction.interceptor.TransactionInterceptor.invoke > > > (TransactionInterceptor.java:107) > > > at > > > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed > > > (ReflectiveMethodInvocation.java:172) > > > at org.springframework.aop.framework.JdkDynamicAopProxy.invoke > > > (JdkDynamicAopProxy.java:202) > > > at $Proxy28.openParentsWithChilds(Unknown Source) > > > at gae.test.TestController.test(TestController.java:17) > > > 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 > > > com.google.appengine.tools.development.agent.runtime.Runtime.invoke > > > (Runtime.java:100) > > > at > > > > > > org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod > > > (HandlerMethodInvoker.java:654) > > > at > > > > > > org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod > > > (HandlerMethodInvoker.java:160) > > > at > > > > > > org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod > > > (AnnotationMethodHandlerAdapter.java:378) > > > at > > > > > > org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle > > > (AnnotationMethodHandlerAdapter.java:366) > > > at org.springframework.web.servlet.DispatcherServlet.doDispatch > > > (DispatcherServlet.java:781) > > > at org.springframework.web.servlet.DispatcherServlet.doService > > > (DispatcherServlet.java:726) > > > at > org.springframework.web.servlet.FrameworkServlet.processRequest > > > (FrameworkServlet.java:636) > > > at org.springframework.web.servlet.FrameworkServlet.doGet > > > (FrameworkServlet.java:545) > > > 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:121) > > > 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:342) > > > 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) > > > Nov 23, 2009 8:20:34 PM com.google.apphosting.utils.jetty.JettyLogger > > > warn > > > > > -- > > > > > 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<google-appengine-java%2bunsubscr...@googlegroups.com> > <google-appengine-java%2bunsubscr...@googlegroups.com<google-appengine-java%252bunsubscr...@googlegroups.com> > > > > > . > > > For more options, visit this group at > > > > ... > > > > read more ยป > > -- > > 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<google-appengine-java%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > > -- 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.