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.RC1.zip
> >> 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>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=.
>
>
>

--

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=.


Reply via email to