Is there any way that key name (or pk-name), key id (or pk-id), or even parent key (or parent-key) can be used in a query regardless of JPQL or JDQL. I know in the Python edition it's possible (correct me if I'm wrong).
If there's no way to use this kind query, then the power of key name or id (obviously from the GAE doc you can always benefit from a annotated parent key) would be very limited *except that you always use encoded string key in conjunction with annotated "gae.pk-name" or "gae.pk-id"*. // More to read if you would like to... >From my limited experience with GAE/J, in a normal app key name/id is a very simple but powerful way to achieve uniqueness. For example, when you have multiple concurrent requests to create a root entity, in each request handler you would first check if it exists and then decide to create a new one or use the existing one. Without using key name/id it's very hard, if possible, to ensure the uniqueness. Because as far as I know in this case, the global unique key generated by the datastore is used to decide the transaction commit will succeed or fail. For the root entities, given the same entity kind and the same key name/id, the generated key instance will always be the same, so you can just let the transaction fail or try it again to rewrite it, but using other fields (say, "name" of a value) than key name/id, in all concurrent transactions a new entity will be created and the transaction commit will succeed since the generated key instance will always be different from each other. If in this case I would like to always use key name/id I roughly have three choices: 1. use Long key or unencoded String key for the entity kind, but the downside of this is you can't make this entity kind be child of any entity kind any more according to the official GAE doc; 2. use Key instance, but the downside is about this question asked in this post: you may use key name/id to make a query; 3. use encoded String key in conjunction with annotated "gae.pk-name" or "gae.pk-id", and the only downside is you have always to use KeyFactory to convert the encoded string to a Key instance when you need one (e.g., to establish an unowned relationship) Last, what's described above seems also be true for entities with a parent. I'm not sure. -- 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.
