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.