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 -~----------~----~----~----~------~----~------~--~---