Thanks a lot for explanations. They've returned me my ability to
sleep. :)

On Sep 16, 7:44 am, Max Ross <maxr+appeng...@google.com> wrote:
> GAE does not support joins so Book.chapters is always lazy loaded.  I'm
> guessing the old posts you're thinking of relate to lazy loading of
> non-relationship fields (Strings, ints, Dates, etc).  These cannot be lazy
> loaded because GAE only fetches entire entities from the datastore (one
> exception to the rule - if you issue a query that only selects the key we
> will issue a keys-only query that fetches only the key, not the entire
> entity).
>
> Max
> On Tue, Sep 15, 2009 at 7:24 PM, Bulat Sirazetdinov <bula...@gmail.com>wrote:
>
>
>
> > I have several questions on lazy loading.
> > How can I make JDO (or JPA) lazy load Book.chapters on GAE?
> > Is Chapter.book in your example really lazy loaded on GAE?
>
> > P.S. I've found some old posts stating that lazy loading is not
> > working on GAE datastore service. That's why I'm asking those
> > questions.
> > P.P.S. Good job! Seeing forward for new snippets.
>
> > On Sep 15, 6:24 pm, Max Ross 
> > <maxr+appeng...@google.com<maxr%2bappeng...@google.com>>
> > wrote:
> > > This example only demonstrates creation of parent and child when both
> > parent
> > > and child use datastore id generation.  If you wanted to use a named Key
> > for
> > > either of these objects as opposed to datastore id generation, the
> > > KeyFactory and the KeyFactory.Builder class would be involved.  This
> > would
> > > also be the case if you were constructing a Key to perform a lookup of
> > > either parent or child.
>
> > > I plan to devote other snippets to more complicated Key-management
> > > scenarios.
>
> > > Thanks,
> > > Max
>
> > > On Tue, Sep 15, 2009 at 4:16 AM, Jeff Arbaugh <jeffarba...@gmail.com>
> > wrote:
> > > > Max,
> > > > Love the examples, however I have one question. In the GAE JDO
> > > > documentation there's much written about the KeyFactory, Builder(s) and
> > > > creating hierarcal Key(s). It's doesn't appear that your example has
> > > > factored these in. I know littered through out my code are KeyFactory
> > and
> > > > Builders for the child objects. Should these Key Builders be included
> > within
> > > > your example?
>
> > > > Thank you,
>
> > > > Jeff
>
> > > > On Mon, Sep 14, 2009 at 7:07 PM, Max Ross 
> > > > <maxr+appeng...@google.com<maxr%2bappeng...@google.com>
> > <maxr%2bappeng...@google.com <maxr%252bappeng...@google.com>>
> > > > > wrote:
>
> > > >> Hello hello and welcome to the very first installment of JDO/JPA
> > Snippets
> > > >> That Work!
>
> > > >> Creating A Bidrectional Owned One-To-Many
>
> > > >> Suppose you're building a book catalog application and you want to
> > model
> > > >> books and chapters.  Books contain chapters.  A chapter cannot exist
> > without
> > > >> a book, so if you delete a book you want its chapters automatically
> > deleted
> > > >> along with it.  You also want to each chapter to have a reference to
> > the
> > > >> book that owns it.  Sounds like a bidrectional, owned, one-to-many
> > > >> relationship is just the thing.  First we'll set up our model objects
> > and
> > > >> then we'll add some code to create a Book with 2 Chapters.
>
> > > >> JPA:
> > > >> @Entity
> > > >> public class Book {
> > > >>     @Id
> > > >>     @GeneratedValue(strategy=GenerationType.IDENTITY)
> > > >>     private Key id;
>
> > > >>     private String title;
>
> > > >>     @OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
> > > >>     private List<Chapter> chapters = new ArrayList<Chapter>();
>
> > > >>     // getters and setters
> > > >> }
>
> > > >> @Entity
> > > >> public class Chapter {
> > > >>     @Id
> > > >>     @GeneratedValue(strategy=GenerationType.IDENTITY)
> > > >>     private Key id;
>
> > > >>     private String title;
> > > >>     private int numPages;
>
> > > >>     @ManyToOne(fetch = FetchType.LAZY)
> > > >>     private Book book;
>
> > > >>     // getters and setters
> > > >> }
>
> > > >> Now let's create a book with two chapters (we'll assume someone else
> > is
> > > >> creating and closing an EntityManager named 'em' for us):
>
> > > >> Book b = new Book();
> > > >> b.setTitle("JPA 4eva");
> > > >> Chapter c1 = new Chapter();
> > > >> c1.setTitle("Intro");
> > > >> c1.setNumPages(10);
> > > >> b.getChapters().add(c1);
> > > >> Chapter c2 = new Chapter();
> > > >> c2.setTitle("Configuration");
> > > >> c2.setNumPages(9);
> > > >> b.getChapters().add(c2);
>
> > > >> em.getTransaction().begin();
> > > >> try {
> > > >>     em.persist(b);
> > > >>     em.getTransaction().commit();
> > > >> } finally {
> > > >>     if (em.getTransaction().isActive()) {
> > > >>         em.getTransaction().rollback();
> > > >>     }
> > > >> }
>
> > > >> JDO:
>
> > > >> @PersistenceCapable(identityType = IdentityType.APPLICATION,
> > detachable =
> > > >> "true")
> > > >> public class Book {
>
> > > >>     @PrimaryKey
> > > >>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > > >>     private Key id;
>
> > > >>     private String title;
>
> > > >>     @Persistent(mappedBy = "book")
> > > >>     @Element(dependent = "true")
> > > >>     private List<Chapter> chapters = new ArrayList<Chapter>();
>
> > > >>     // getters and setters
> > > >> }
>
> > > >> @PersistenceCapable(identityType = IdentityType.APPLICATION,
> > detachable =
> > > >> "true")
> > > >> public class Chapter {
> > > >>     @PrimaryKey
> > > >>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> > > >>     private Key id;
>
> > > >>     private String title;
> > > >>     private int numPages;
>
> > > >>     @Persistent
> > > >>     private Book book;
>
> > > >>     // getters and setters
> > > >> }
>
> > > >> Now let's create a book with two chapters (we'll assume someone else
> > is
> > > >> creating and closing a PersistenceManager named 'pm' for us):
>
> > > >> Book b = new Book();
> > > >> b.setTitle("JDO 4eva");
> > > >> Chapter c1 = new Chapter();
> > > >> c1.setTitle("Intro");
> > > >> c1.setNumPages(10);
> > > >> b.getChapters().add(c1);
> > > >> Chapter c2 = new Chapter();
> > > >> c2.setTitle("Configuration");
> > > >> c2.setNumPages(9);
> > > >> b.getChapters().add(c2);
>
> > > >> pm.currentTransaction().begin();
> > > >> try {
> > > >>     pm.makePersistent(b);
> > > >>     pm.currentTransaction().commit();
> > > >> } finally {
> > > >>     if (pm.currentTransaction().isActive()) {
> > > >>         pm.currentTransaction().rollback();
> > > >>     }
> > > >> }
--~--~---------~--~----~------------~-------~--~----~
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-java@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