It looks very similar to the problem I'm having: http://groups.google.com/group/google-appengine-java/browse_thread/thread/72dec16088136124/4d3efbf8ad30028f#4d3efbf8ad30028f
On Sep 8, 7:09 pm, Dobromir <[email protected]> wrote: > Hi Max, > > I updated my code to use getters & setters and set both children and > parent relationships. The tests still fail as before: > > public class RelationshipTest extends LocalServiceTestCase { > > @Test // PASSES > public void saveParentWithChildAdded() throws Throwable { > Child child = new Child(); > Parent parent = new Parent(); > parent.addChild(child); > savePojo(parent); > assertNotNull(child.key); > assertNotNull(parent.key); > } > > @Test // FAILS > public void saveParentThenAddChild() throws Throwable { > Child child = new Child(); > Parent parent = new Parent(); > savePojo(parent); > assertNotNull(parent.key); > parent.addChild(child); > child.setParent(parent); > savePojo(parent); > assertNotNull(parent.key); > assertNotNull(child.key); // THIS FAILS > } > > @Test // FAILS > public void saveChildWithParentSet() throws Exception { > Child child = new Child(); > Parent parent = new Parent(); > savePojo(parent); > child.setParent(parent); > parent.addChild(child); > savePojo(child); // Shouldn't this work?? > assertNotNull(parent.key); > assertNotNull(child.key); // THIS FAILS > } > > @Test // FAILS, obviously > public void saveParentWithParentSet() throws Exception { > Child child = new Child(); > Parent parent = new Parent(); > savePojo(parent); > child.setParent(parent); > parent.addChild(child); > savePojo(parent); > assertNotNull(parent.key); > assertNotNull(child.key); // THIS FAILS > } > > private void savePojo(Object pojo) throws Exception { > PersistenceManager pm = PMF.get().getPersistenceManager(); > pm.setDetachAllOnCommit(true); > pm.setCopyOnAttach(false); > try { > pm.makePersistent(pojo); > pm.close(); > } catch (Exception e) { > pm.close(); > throw e; > } > } > > @PersistenceCapable(identityType = IdentityType.APPLICATION, > detachable="true") > public static class Parent { > > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > Key key; > @Persistent(mappedBy = "parent") > private List<Child> children; > > public Parent() { > children = Lists.newArrayList(); > } > > public List<Child> getChildren() { > return children; > } > public void addChild(Child child) { > children.add(child); > } > } > > @PersistenceCapable(identityType = IdentityType.APPLICATION, > detachable="true") > public static class Child { > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > Key key; > > @Persistent > private Parent parent; > > public Parent getParent() { > return parent; > } > > public void setParent(Parent parent) { > this.parent = parent; > } > } > > } > > Any ideas? > > Dobromir > > On Aug 14, 8:11 pm, Max Ross <[email protected]> wrote: > > > You may find this page > > helpful:http://www.datanucleus.org/products/accessplatform_1_1/jdo/orm/one_to... > > > The key point is that you need to set both sides of a bidirectional > > relationship. Also, if you're accessing members directly (as in the below > > example) you need to annotate the class performing this access with > > @PersistenceAware. Otherwise JDO can't see that you're modifying the fields > > and doesn't know it needs to perform any updates. However, it's much easier > > to just always access members via setters and getters. > > > Hope this helps, > > Max > > > On Fri, Aug 14, 2009 at 4:31 PM, Dobromir <[email protected]> wrote: > > > > Here's another test that fails and which gets to the heart of my > > > problem: how do I add a Child to a Parent that's already been saved? > > > > �...@test // FAILS - help! > > > public void saveParentThenAddChild() throws Throwable { > > > Child child = new Child(); > > > Parent parent = new Parent(); > > > savePojo(parent); > > > assertNotNull(parent.key); > > > parent.children = Lists.newArrayList(child); > > > savePojo(parent); > > > assertNotNull(parent.key); > > > assertNotNull(child.key); // THIS FAILS > > > } --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
