Philip DONAGHY wrote:
Bruce Snyder a �crit :

Philip DONAGHY wrote:


I'm just throwing this out there because I could really use a join
syntax in Castor JDO. I would like to keep the select as a simple object
but the from and where clauses would look something like this.

SELECT Org

FROM db.finaixm.OrgAuth Org,
    db.finaixm.OrgAuthM OrgM

WHERE Org.oamOrgAuthMId = OrgM.orgAuthMId AND
     Org.txtName=$1

Philip,

This can be achieved through th euse of a correctly written mapping
descriptor. The odd part is that the OQL query will *not* contain an
explicit join because Castor's OQL engine will create the query behind
the scenes. Are you not able to achieve this? Please elaborate further.

Bruce


The difficulty with this can be explained by presenting our schema which
supports temporality. Each entity can have several versions (changes to
airport data has to be traceable). For each moment in time there can be
one and only one valid version. Therefore for each entity there are two
tables. A version table which contains the data, a pk (primary key), one
or more fk (foreign keys), and the date meta data (dateStart, dateEnd,
dateCancelled). A master table represents all the versions a pk column
only. Therefore you have the following relationships.

Ahp.pk
Ahp.codeId
Ahp.fk---> AhpM.pk
               /\
               ||
               Aho.AhpMfk
               Aho.fk --------> AhoM.pk
               Aho.ObsMfk
               ||
               \/
Obs.fk--> ObsM.pk
Obs.geoLat
Obs.geoLong

This schema shows 6 tables AirportObstacle (Aho), AirportObstacleM
(AhoM), Obstacle (Obs), ObstacleM (ObsM), Airport (Ahp), AirportM
(AhpM). The sql query required is :

select * from Aho, AhoM, Obs, ObsM, Ahp, AhpM where Aho.Ahpfk = AhpM.pk and Ahp.fk = AhpM.pk and Ahp.codeId = ?
Aho.Obsfk = ObsM.pk and Obs.fk = ObsM.pk and Obs.geoLat = ? and
Obs.geoLong = ?


In oql

select Aho from Aho where Aho.AhoM.pk = Aho.fk and
Aho.AhpM.AhpCollection.contains(Ahp where Ahp.codeId = $1) and
Obs.ObsM.ObsCollection.contains(Obs where Obs.geoLat = $2 and
Obs.geoLong = $3)

Is this kind of Mapping possible?

The oql implementation in Castor just translates to SQL. So why not
implement joins.

There is no support for a contains() function in Castor's OQL engine. In your case, you may be better off writing pass through SQL. This interface simply passes straight SQL to the query engine by prepending the words 'CALL SQL' to the query. There is a FAQ entry about this here:


    http://www.castor.org/jdo-faq.html#Can-I-write-a-pass-thru-OQL?

Note the following statement from the FAQ entry: But remember that the order of the fields listed must match what is defined in the mapping file.

I'm not saying this is the answer, but it's worth a shot.

Bruce
--
perl -e 'print unpack("u30","<0G)[EMAIL PROTECTED]&5R\\"F9E<G)E=\\$\\!F<FEI+F-O;0\\`\\`");'


The Castor Project
http://www.castor.org/

Apache Geronimo
http://incubator.apache.org/projects/geronimo.html



----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev

Reply via email to