Indeed,
GAE/J does have a limited JDO api (0) ; their use of the JDO naming is misleading ... :(
On the other side, as you suggested, JDO does support Joins, as annotations (1) and/or as metadata(2);
which can be retrieved afterwards using a JDOQL query.
Please correct me if I am wrong, but JDO\JDOQL feels less powerful than an SQL query.
The power of SQL is the capability to join on the fly a multitude of related tables.
I still cannot see how can I support such a query, like this simple example from my webapp
(human) schema: a product line has many catalogs, which have many products, any invoice has any of those products
SELECT a.id, a.name, b.id, b.name, c.id, c.name from products a
left join catalog b on b.id = a.fk_catalog_id
left join productline c on c.id = b.fk_productline_id
where a.id in (select distinct product_id from invoice_product where invoice_id = <PARAM> )
links:
theweb@(0); code.google.com/intl/fr-FR/appengine/docs/java/datastore/usingjdo.html#Unsupported_Features_of_JDO
theweb@(1); www.datanucleus.org/products/accessplatform/jdo/annotations.html#Joins
theweb@(2); www.datanucleus.org/products/accessplatform/jdo/orm/one_to_many_list.html#join_uni