I used an extent to verify that a B with a B name exists.

            Extent<B> e = pm.getExtent(B.class);
            Iterator<B> it = e.iterator();
            while (it.hasNext()) {
                B rsb = it.next();
                System.out.println(rsb.getName());
                System.out.println(rsb.getKey());
            }
            e.closeAll();

The output:

B
agR0ZXN0chALEgFBIgFBDAsSAUIiAUIM

On Jan 27, 6:41 pm, Sydney <sydney.henr...@gmail.com> wrote:
> Since I declared the parameter with query.declareParameters("String
> nameParam");, the colon is not valid. As expected I got an exception
> org.datanucleus.store.query.QueryCompilerSyntaxException: Explicit
> parameters defined for query, yet implicit parameter syntax
> (":nameParam") found
>
> On Jan 27, 4:39 pm, Rusty Wright <rwright.li...@gmail.com> wrote:
>
>
>
> > Do you need a colon in front of nameParam?
>
> >             query.setFilter("name == :nameParam");
>
> > Sydneywrote:
> > > 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.

Reply via email to