The query returns no result. ApiProxy.setEnvironmentForCurrentThread(new TestEnvironment ()); ApiProxy.setDelegate(new ApiProxyLocalImpl(new File(".")) { }); A a = new A("A"); B b = new B("B"); a.getBs().add(b); PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("transactions-optional"); PersistenceManager pm = pmf.getPersistenceManager(); Transaction tx = pm.currentTransaction(); try { tx.begin(); pm.makePersistent(a); tx.commit(); } finally { if (tx.isActive()) { tx.rollback(); } }
System.out.println(a.getKey()); A ap = pm.getObjectById(A.class, "A"); System.out.println(ap.getKey()); Query query = pm.newQuery(B.class); query.setFilter("name == nameParam"); query.declareParameters("String nameParam"); List<B> rs = (List<B>) query.execute("B"); System.out.println(rs.size()); On Jan 23, 12:20 am, John Patterson <jdpatter...@gmail.com> wrote: > Execute a query on the name property of B rather than loading it by > key. If the name is unique the result should only contain one B. > > On 23 Jan 2010, at 11:41,Sydneywrote: > > > > > I have a one to many relationship. There is a problem in the way I > > query for a B object. I was wondering what is the best way (most > > efficient) to do that. > > > A a = new A("A"); > > B b = new B("B"); > > a.getBs().add(b); > > pm.makePersistent(a); // it's done inside a transaction > > A ap = pm.getObjectById(A.class, "A"); // FINE > > B bp = pm.getObjectById(B.class, "B"); // NOT FOUND Exception > > > I guess B is not found because the real key is not B but B + A key. > > How do you get the B object when you don't know nothing about A? > > > public class A { > > > �...@primarykey > > �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > �...@extension(vendorName = "datanucleus", key = "gae.encoded-pk", > > value = "true") > > private String key; > > �...@persistent > > �...@extension(vendorName = "datanucleus", key = "gae.pk-name", value > > = "true") > > private String name; > > �...@persistent(mappedBy = "a") > > private List<B> bs; > > > public A(String name) { > > this.name = name; > > bs = new ArrayList<B>(); > > } > > ... Getter/Setter > > } > > > @PersistenceCapable(identityType = > > javax.jdo.annotations.IdentityType.APPLICATION) > > public class B { > > > �...@primarykey > > �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > > �...@extension(vendorName = "datanucleus", key = "gae.encoded-pk", > > value = "true") > > private String key; > > �...@persistent > > �...@extension(vendorName = "datanucleus", key = "gae.pk-name", value > > = "true") > > private String name; > > �...@persistent > > private A a; > > > public B(String name) { > > this.name = name; > > } > > ... Getter/Setter > > } > > > -- > > 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 > > athttp://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 google-appengine-j...@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.