I am creating two instances of B. In the first instance, I am making it as a
child of A.  In the second instance, it is by itself.  The second instance
cannot persist itself.  Hence, I am raising this issue and thinking it as a
bug.

Is the owned-relationship at the class level?
I think it is at the entity level.

Can someone from Google team, please confirm on this.

-Aswath

On Mon, Feb 22, 2010 at 2:26 PM, Payam <[email protected]> wrote:

> Hmm...
>
> If JDO does not allow unowned relationships, then when you are trying
> to persist B inside A, then trying to persist B by itself, are you not
> declaring that B is actually unowned? In this case, A can not actually
> hold onto B directly and can only hold its Key instead. When I read
> the documentation, I understood "owned" relationships as an Object
> (e.g. B) is always found in another object (e.g. A) and never by
> itself.
>
> Do you think that could be it? Although its weird that the 2nd
> transaction works when you move it around. Does it actually store two
> different Bs?
> These are all ideas. Not sure honestly...
>
> On Feb 21, 10:24 pm, aswath satrasala <[email protected]>
> wrote:
> > Hello Payam
> > Thanks for looking into this.  Please see inline
> >
> >
> >
> >
> >
> > On Sun, Feb 21, 2010 at 3:25 PM, Payam <[email protected]> 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'
> inhttp://code.google.com/appengine/docs/java/datastore/creatinggettinga..
> ..
> >
> >
> >
> > > 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 <[email protected]>
> > > wrote:
> > > > any help on this please...
> >
> > > > Thanks.
> >
> > > > On Fri, Feb 12, 2010 at 3:18 PM, aswath satrasala <
> >
> > > > [email protected]> 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 <
> > > > > [email protected]> 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 <
> > > > >> [email protected]> 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 <
> > > > >>> [email protected]> 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
> > > [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<google-appengine-java%[email protected]><google-appengine-java%2B
> [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]<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