Now. How to retrieve a book and its chapters having only Chapter's
title (imagine all titles in whole systems are unique)

On Sep 15, 1:07 am, Max Ross <maxr+appeng...@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