Incorrect SQL created by DynamicQL when using left-joins
cniermei Aug 11, 2006 12:28 PMI am getting an SQLException from the SQL generated by a DynamicQL statement. I did not got this error until I added left-joins to my jbosscmp-jdbc.xml. I will try to explain as best I can the circumstances which have led to this error.
I am using Jboss 4.0.3SP1 connecting to a PostgreSQL 8.0.4 server.
I have a DynamicQL query, which can look something like this:
DYNAMIC-QL: SELECT DISTINCT Object (r) FROM Recording r WHERE 1=1 AND r.phoneCall.dateOfCall >= ?1 AND r.phoneCall.dateOfCall <= ?2 AND r.phoneCall.startTime >= ?3 AND r.phoneCall.callCentre.key = ?4 ORDER BY r.phoneCall.key, r.timestampSequence
It can take over 5 minutes to get the results and populate classes with the values from the recording table and all of its CMR fields, so I'm trying to use read-ahead on-find and left-joins to see if that speeds it up. The read ahead is:
<read-ahead> <strategy>on-find</strategy> <page-size>4</page-size> <eager-load-group>*</eager-load-group> <left-join cmr-field="question" eager-load-group="*"/> <left-join cmr-field="phoneCall" eager-load-group="*"> <left-join cmr-field="interviewerEmp" eager-load-group="*"> <left-join cmr-field="dept" eager-load-group="*"> <left-join cmr-field="parentDept" eager-load-group="*"/> </left-join> <left-join cmr-field="title" eager-load-group="*"/> </left-join> <left-join cmr-field="versionStatus" eager-load-group="*"/> <left-join cmr-field="version" eager-load-group="tss"> <left-join cmr-field="study" eager-load-group="*"/> </left-join> <left-join cmr-field="dashCase" eager-load-group="*"> <left-join cmr-field="form" eager-load-group="*"> <left-join cmr-field="studyDetail" eager-load-group="*"> <left-join cmr-field="study" eager-load-group="*"> </left-join> </left-join> </left-join> </left-join> <left-join cmr-field="callStatus" eager-load-group="*"/> </left-join> <left-join cmr-field="monitoringEmp" eager-load-group="*"> <left-join cmr-field="dept" eager-load-group="*"> <left-join cmr-field="parentDept" eager-load-group="*"/> </left-join> <left-join cmr-field="title" eager-load-group="*"/> </left-join> </read-ahead>
The SQL generated by this query fails, appearantly because of the strange way it combines left outer joins and WHERE clauses to join the classes together.
In the FROM clause:
FROM dash.recording t0_r, dash.phone_call t2_r_phoneCall, call_centre_view t19_r_phoneCall_callCentre LEFT OUTER JOIN dash.question t1_r_question ON t0_r.question_id=t1_r_question.id LEFT OUTER JOIN...
In there WHERE clause:
...AND t0_r.phone_call_id=t2_r_phoneCall.id AND t2_r_phoneCall.call_centre_id=t19_r_phoneCall_callCentre.id)) AND t0_r.phone_call_id=t2_r_phoneCall.id
The resulting error is:
javax.ejb.FinderException: Find failed: java.sql.SQLException: ERROR: relation "t0_r" does not exist
Is there something wrong with the way I'm setting up the left-joins, or might this be a bug in the sql generation code?
Thanks in advance for any help,
Chris Niermeier