Why do you want to store both in the same transaction? To me, it seems
transactions are used to guarantee two things happen.  eg.  you don't
want to delete one record without making sure the a log of deleted
records is updated.  Transactions are also used to prevent collisions,
eg. I don't want two users adding to a counter at the same time and
one of their adds is lost.

It seems neither of these is likely.  It is unlikely that a new Person
will be created and before the system can save their mobile, some
other user will try and edit it.  It is also unlikely that either of
these will fail and not fail gracefully.  If you try and add a user in
one transaction then try to add a mobile in a second transaction
either both will succeed or fail.  Same outcome as a single
transaction.  Or one of the two fails and you simply try it again or
delete the one that didn't fail and inform the user.

If you really need a single transaction you can put both items in the
same entity group using a key builder.

You can see an example here under Creating Entities With Entity Groups
http://code.google.com/appengine/docs/java/datastore/transactions.html

 Dec 15, 10:16 pm, Didier Durand <durand.did...@gmail.com> wrote:
> Hi,
>
> If they don't belong to the same entity group, you will raise an
> exception by trying to store 2 objects in a single transaction.
>
> 2 ways to handle that:
>
>    a) you make Mobile belong to same entity group as Person so you'll
> be able to store both in a single transaction. I understand in your
> question that you can't go this way.
>    b) you store one let's say Person in first transaction and during
> this transaction, you start a task as part of the transaction: "You
> can enqueue a task as part of a datastore transaction, such that the
> task is only enqueued—and guaranteed to be enqueued—if the transaction
> is committed successfully. Tasks added within a transaction are
> considered to be a part of it and have the same level of isolation and
> consistency." as said 
> inhttp://code.google.com/appengine/docs/java/taskqueue/overview.html#Ta...
>
> Hope it helps
>
> didier
>
> On Dec 15, 8:26 am, kartik kudada <kartik.kud...@gmail.com> wrote:
>
> > Can we store two unowned objects(one to many) in datastore in a single
> > transaction.
> > For example -  We have
>
> > public class Person {
> > @PrimaryKey
> > �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > private Long id;
>
> > @Persistent
> > private String name;
>
> >         @Persistent
> >  private List<Key> mobileIds =  new ArrayList<Key>();
>
> >    //....
> >   //.....
> >   }
>
> > public class Mobile {
>
> >         �...@primarykey
> > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> >  private Key mobileId;
>
> >   // ...
> >  //....
>
> > }
>
> > I want to store these two objects in datastore in single transaction so that
> > relation  can be made in between both objects.
> > Tell me if any other solution is there ?

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