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