http://code.google.com/appengine/docs/java/datastore/relationships.html#Owned_One_to_One_Relationships

"You create a bidirectional one-to-one relationship using fields on
both classes, with an annotation on the child class's field to declare
that the fields represent a bidirectional relationship. The field of
the child class must have a @Persistent annotation with the argument
mappedBy = "...", where the value is the name of the field on the
parent class."

>From what I see, you have it backwards, with the annotation in the
parent class.

Jake

On Feb 24, 4:26 am, Anton Klotz <dipl.ing.akl...@googlemail.com>
wrote:
> Hi,
>
> could please somebody tell me, what I'm doing wrong here?
>
> Here is one child datastructure I want to persist:
>
> @PersistenceCapable
>
> public class OfferDetails {
>
>         @PrimaryKey
>         @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>         private Key mId;
>
>         @Persistent
>         private String mOfferDescription;
>
>         @Persistent
>         private Offer mOffer;
>
>         public OfferDetails ()
>         {
>
>         }
>
>         public OfferDetails (String offerDesc)
>         {
>                 this ();
>                 mOfferDescription = offerDesc;
>         }
>
> }
>
> And here is the parent
>
> @PersistenceCapable(identityType = IdentityType.APPLICATION,
> detachable="true")
>
> public class Offer {
>         @PrimaryKey
>         @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>         private Key mId;
>
>         @Persistent(mappedBy="mOffer")
>         private OfferDetails mOfferDetails;
>
> public Offer( OfferDetails offerDetails)
>         {
>                 this();
>                 mOfferDetails = offerDetails;
>         }
>
> }
>
> Here is the presistance routine:
>
> public class OfferDataAccess {
>           private static final long serialVersionUID = -7037344095742126014L;
>           private PersistenceManager pm;
>
>           public OfferDataAccess ()
>           {
>                   pm = PMF.get().getPersistenceManager();
>           }
>
>         public void persistOffer (Offer offer)
>         {
>                 pm.currentTransaction().begin();
>                 try {
>                         pm.makePersistent(offer);
>                         pm.currentTransaction().commit();
>                 } finally {
>                         if (pm.currentTransaction().isActive())
>                                 pm.currentTransaction().rollback();
>                         pm.close();
>                 }
>         }
>
> And here is the call of the persistance routine:
> class CreateOfferActionCommand
> {
>         public void execute() {
>                 mOfferDB = new OfferDataAccess ();
>                 mOffer = new Offer (mOfferDetails);
>                 mOfferDB.persistOffer (mOffer);
>
> }
> }
>
> Now if I run this code, I get following errormessage:
>
> java.lang.IllegalStateException: Primary key for object of type
> OfferDetails is null.
>         at
> org.datanucleus.store.appengine.EntityUtils.getPkAsKey(EntityUtils.java:
> 152)
>         at
> org.datanucleus.store.appengine.DatastoreFieldManager.getKeyForObject(DatastoreFieldManager.java:
> 625)
>         at
> org.datanucleus.store.appengine.DatastoreFieldManager.getParentKeyFromParentField(DatastoreFieldManager.java:
> 634)
>         at
> org.datanucleus.store.appengine.DatastoreFieldManager.establishEntityGroup(DatastoreFieldManager.java:
> 591)
>         at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess(DatastorePersistenceHandler.java:
> 338)
>         at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java:
> 246)
>         at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:
> 235)
>         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
> com.sparradar.server.datamodel.offer.OfferDataAccess.persistOffer(OfferDataAccess.java:
> 29)
>         at
> com.sparradar.server.action.actioncommands.CreateOfferActionCommand.execute(CreateOfferActionCommand.java:
> 60)
>         at
> info.rk.vaadinapp.manager.urldispatching.URLActionDispatcher.handleURI(URLActionDispatcher.java:
> 90)
>         at com.vaadin.ui.Window.handleURI(Window.java:358)
>         at
> com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleURI(AbstractCommunicationManager.java:
> 1830)
>         at
> com.vaadin.terminal.gwt.server.CommunicationManager.handleURI(CommunicationManager.java:
> 311)
>         at
> com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleURI(AbstractApplicationServlet.java:
> 912)
>         at
> com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:
> 471)
>         at
> com.vaadin.terminal.gwt.server.GAEApplicationServlet.service(GAEApplicationServlet.java:
> 231)
>         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.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
> 51)
>         at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1084)
>         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:
> 70)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
> 139)
>         at com.google.appengine.tools.development.JettyContainerService
> $ApiProxyHandler.handle(JettyContainerService.java:352)
>         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)
>
> Could you please tell me, what I'm doing wrong here?

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

Reply via email to