Here's a place to look at what's happening:

http://www.datanucleus.org/products/accessplatform/enhancer.html

On Mon, Jun 14, 2010 at 06:34, luka <[email protected]> wrote:

> Thanks Tristan,
>
> I made the proper code adjustments, but unfortunately JDO is not aware
> of the Entity relationship.
>
> Is there a certain way I can use to make JDO consistent with low level
> API keys ?
>
> On Jun 13, 4:08 pm, Tristan <[email protected]> wrote:
> > It's possible to do anything in low-level API :)
> >
> > Although your code wouldn't work because you don't have question key
> > available, and you need to include transaction parameter in your puts.
> >
> > It would need to be something like
> >
> > Transaction txn = dataStore.beginTransaction();
> > Key key = dataStore.put(txn, question);
> > Entity a1 = new Entity("Answer", key);
> > Entity a2 = new Entity("Answer", key);
> > dataStore.put(txn, a1);
> > dataStore.put(txn, a2);
> > txn.commit();
> >
> > But it would probably make more sense to combine the answer puts:
> >
> > Transaction txn = dataStore.beginTransaction();
> > Key key = dataStore.put(txn, question);
> > Entity a1 = new Entity("Answer", key);
> > Entity a2 = new Entity("Answer", key);
> > List<Entity> as = new ArrayList<Entity>(2);
> > as.add(a1);
> > as.add(a2);
> > dataStore.put(txn, as);
> > txn.commit();
> >
> > On top of that, if you know what the keys should be, (if you're naming
> > them with strings), then you could probably do it more efficiently
> > with one put
> >
> > Key questionKey = KeyFactory.createKey("Question", "question1");
> > Key answer1Key = KeyFactory.createKey(questionKey, "Answer",
> > "answer1");
> > Key answer2Key = KeyFactory.createKey(questionKey, "Answer",
> > "answer2");
> > Entity question = new Entity(questionKey);
> > Entity answer1 = new Entity(answer1Key);
> > Entity answer2 = new Entity(answer2Key);
> > List<Entity> entities = new ArrayList<Entity>(3);
> > entities.add(question);
> > entities.add(answer1);
> > entities.add(answer2);
> > Transaction txn = dataStore.beginTransaction();
> > dataStore.put(txn, entities);
> > txn.commit();
> >
> > The other thing you need to make sure is that JDO understands low-
> > level API keys and relationships that you code and that persistance
> > manager doesn't rewrite them in some way. (I don't know an answer to
> > that).
> >
> > Cheers.
> >
> > On Jun 12, 11:03 am, luka <[email protected]> wrote:
> >
> > > Hi,
> >
> > > My application is currently using JDO, although for some stress
> > > testing
> > > I am trying to employ batch insert using low level API (since it is
> > > less practical to do it with JDO).
> >
> > > I have JDO parent-child one to many model which I am trying to insert
> > > using the low level API  "Entity" model.
> > > So far I have succeeded to batch insert the entities although failed
> > > in making the relationship.
> >
> > > Is it possible to accomplish a parent-child one to many relationship
> > > using Entity API ?
> >
> > > Short Example:
> > > -------------------
> > > // One Question has Many Answers
> >
> > > @PersistenceCapable (detachable = "true")
> > > public class Question implements Serializable     {
> >
> > >      @PrimaryKey
> > >     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > >     @Extension(vendorName="datanucleus", key="gae.encoded-pk",
> > > value="true")
> > >     private String key;
> >
> > >    @Persistent(mappedBy = "question")
> > >     @Element(dependent = "true")
> > >     private List<Answer> answers;
> >
> > >     ......
> >
> > > }
> >
> > > @PersistenceCapable (detachable = "true")
> > > public class Answer implements Serializable     {
> >
> > >     @PrimaryKey
> > >     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > >     @Extension(vendorName="datanucleus", key="gae.encoded-pk",
> > > value="true")
> > >     private String key;
> >
> > >      @Persistent
> > >      private Question question;
> >
> > >      ....
> >
> > > }
> >
> > > // Using low level API
> >
> > > Entity question = new Entity("Question");
> >
> > > Entity a1 = new Entity("Answer",question.getKey());
> > > ....
> > > Entity a2 = new Entity("Answer",question.getKey());
> > > ...
> >
> > > DatastoreService dataStore =
> > > DatastoreServiceFactory.getDatastoreService();
> > > Transaction txn = dataStore.beginTransaction();
> > > dataStore.put(question);
> > > dataStore.put(a1);
> > > dataStore.put(a2);
> > > txn.commit();
> >
> > > //END
> >
> > > Thanks
> > > Luka
>
> --
> 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]<google-appengine-java%[email protected]>
> .
> 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 [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.

Reply via email to