Hello Payam
Thanks for looking into this.  Please see inline

On Sun, Feb 21, 2010 at 3:25 PM, Payam <pmoghad...@gmail.com> wrote:

> Hello Aswath,
>
> What you are doing seems really odd to me. From my understanding a
> Datastore Key consists of multiple components.
> "A complete key includes several pieces of information, including the
> application ID, the kind, and an entity ID" - GAE Docs
>
> If you use encoded key strings, you can get access to these other
> pieces of information:
> @PrimaryKey
> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> @Extension(vendorName="datanucleus", key="gae.encoded-pk",
> value="true")
> private String encodedKey;
>
> @Persistent
> @Extension(vendorName="datanucleus", key="gae.pk-name", value="true")
> private String keyName;
>
> @Persistent
> @Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
> private Long keyId;
>
> In this case, you have access to the name ID (keyName) and numeric ID
> (keyID) of the encoded key. Therefore, from my understanding, you can
> not change the name ID after you have persisted your first object. The
> first object determines the name ID for all remaining objects (from my
> understanding). This is why when you try to change it for the second
> object, you get an exception.
>
Your understanding is not documented.  Please see 'encodedStrings' in
http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html#Keys.


>
> Perhaps, you can better explain why you are using the "gae.pk-name"
> extension for the name. The context of your code is not clear!
>
"When using encoded key strings, you can provide access to an object's
string or numeric ID with an additional field:"
I am using the gae-pk-name, so that I can identity the entity uniquely.
- if it is associated with a parent, I do, KeyFactory.createKey (parentkey,
kind, name)  and then access the entity.
- if it is not associated with the parent, I do KeyFactory.createKey(kind,
name)  and then access the entity.  I use this entity to store default
values for the entity in my application.

Thanks,
-Aswath


Thanks!

>
>
> On Feb 16, 11:38 pm, aswath satrasala <aswath.satras...@gmail.com>
> wrote:
> > any help on this please...
> >
> > Thanks.
> >
> > On Fri, Feb 12, 2010 at 3:18 PM, aswath satrasala <
> >
> >
> >
> > aswath.satras...@gmail.com> wrote:
> > > Hello Ikia
> > > As suggested by you in the thread 'Incorrect number of entities
> returned',
> > > I have attached the complete files in my previous email.
> > > Please let me know, what am I doing wrong here.
> >
> > > Thanks
> > > -Aswath
> >
> > > On Tue, Feb 9, 2010 at 3:06 PM, aswath satrasala <
> > > aswath.satras...@gmail.com> wrote:
> >
> > >> Hello Ikai,
> > >> Attached is the zip file that contains three files
> > >> A.java
> > >> B.java
> > >> BTest.java
> >
> > >> Please load in your environment and test it.
> >
> > >> Thanks.
> > >> -Aswath
> >
> > >> On Fri, Feb 5, 2010 at 4:36 PM, aswath satrasala <
> > >> aswath.satras...@gmail.com> wrote:
> >
> > >>> B list is missing from class A in my previous posting.  Here is the
> > >>> complete A class...
> >
> > >>> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> > >>> public class A {
> > >>>     @PrimaryKey
> > >>>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > >>>     @Extension(vendorName = "datanucleus", key="gae.encoded-pk",
> > >>> value="true")
> > >>>     private String id;
> >
> > >>>     @Persistent
> > >>>     @Extension(vendorName = "datanucleus", key="gae.pk-name",
> > >>> value="true")
> > >>>     private String name;
> >
> > >>>     @Persistent
> > >>>     private List<B> bList ;
> >
> > >>> }
> >
> > >>> On Fri, Feb 5, 2010 at 4:32 PM, aswath satrasala <
> > >>> aswath.satras...@gmail.com> wrote:
> >
> > >>>> This is a similar posting I had posted earlier "incorrect number of
> > >>>> entities returned".  Hopefully, this posting may be more clean and I
> will
> > >>>> get some replies.
> > >>>> I have two classes
> > >>>> 1) A
> > >>>> 2) B
> > >>>> A is in 1 to many relationship with B
> > >>>> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> > >>>> public class A {
> > >>>>     @PrimaryKey
> > >>>>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > >>>>     @Extension(vendorName = "datanucleus", key="gae.encoded-pk",
> > >>>> value="true")
> > >>>>     private String id;
> >
> > >>>>     @Persistent
> > >>>>     @Extension(vendorName = "datanucleus", key="gae.pk-name",
> > >>>> value="true")
> > >>>>     private String name;
> > >>>> }
> >
> > >>>> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> > >>>> public class B {
> > >>>>     @PrimaryKey
> > >>>>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > >>>>     @Extension(vendorName = "datanucleus", key = "gae.encoded-pk",
> value
> > >>>> = "true")
> > >>>>     private String id;
> >
> > >>>>     @Persistent
> > >>>>     @Extension(vendorName = "datanucleus", key = "gae.pk-name",
> value =
> > >>>> "true")
> > >>>>     private String name;
> > >>>> }
> >
> > >>>> public class BTest extends JDOTestCase {
> >
> > >>>>     public void testB() throws Exception {
> > >>>>         A a = new A();
> > >>>>         a.setName("a");
> > >>>>         B b = new B();
> > >>>>         b.setName("b");
> > >>>>         a.getBList().add(b);
> >
> > >>>>         beginTxn();
> > >>>>         pm.makePersistent(a);
> > >>>>         a = pm.getObjectById(A.class, a.getId());
> > >>>>         assertEquals(1, a.getBList().size());
> > >>>>         commitTxn();
> >
> > >>>>         B b1 = new B();
> > >>>>         b1.setName("b1");
> > >>>>         beginTxn();
> > >>>>         pm.makePersistent(b1);
> > >>>>         b1 = pm.getObjectById(B.class, b1.getId());
> > >>>>         b1.getId();
> > >>>>         commitTxn();
> > >>>>     }
> > >>>> }
> >
> > >>>> The test fails at the last line "b1.getId()"
> > >>>> If any of B entity is in relation with A earlier, then another
> entity of
> > >>>> B cannot be persisted by itself.
> >
> > >>>> If I move the 2nd transaction to the beginning, the test passes.
> >
> > >>>> -Aswath
>
> --
> 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=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 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