Hi,


Here is my case: (I am using OJB 1.0.3)





<class-descriptor class="Parent">

<field-descriptor name="firstName" column="... " jdbc-type="VARCHAR"
primarykey="true" />

            <field-descriptor name="lastName" column="..."
jdbc-type="VARCHAR" primarykey="true" />





      <collection-descriptor

            name="allChildren"


collection-class="org.apache.ojb.broker.util.collections.ManageableArray
List"

                        element-class-ref="Child"

                        >

                        <inverse-foreignkey field-ref="lastName" />

            </collection-descriptor>



</class-descriptor>



<class-descriptor class="Child">

<field-descriptor name="firstName" column="..." jdbc-type="VARCHAR"
primarykey="true" />

            <field-descriptor name="lastName" column="..."
jdbc-type="VARCHAR" primarykey="true" />

</class-descriptor>





And here is a problem:





When retrieving



ReportQueryByCriteria qry = QueryFactory.newReportQuery(Parent.class,
new String[] {"firstName","allChildren.firstName"}, criteria, false);



The query fails with Exception:



java.lang.ArrayIndexOutOfBoundsException

1

Stack Trace:

*
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$Join.appendJoinE
qualities(SqlQueryStatement.java:2059)

*
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendJoinSQL92(
SqlQueryStatement.java:1555)

*
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendTableWithJ
oins(SqlQueryStatement.java:1498)

*
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(Un
known Source)

*
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPrepare
dSelectStatement(Unknown Source)

*
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown
Source)

*
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown
Source)

*
org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown Source)

*
org.apache.ojb.broker.accesslayer.ReportQueryRsIterator.<init>(Unknown
Source)

*
org.apache.ojb.broker.core.ReportRsIteratorFactoryImpl.createRsIterator(
Unknown Source)

*
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(
Unknown Source)

*
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorF
romQuery(Unknown Source)

*
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorB
yQuery(Unknown Source)

*
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIte
ratorByQuery(Unknown Source)

*
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIte
ratorByQuery(Unknown Source)

The additional debugging revealed that inside of appendJoinEqualities():

Join.appendJoinEqualities(SELECT A0.FNAME,A1.FNAME FROM PARENT_TABLE A0
INNER JOIN CHILD_TABLE A1 ON )

leftKeys.length = 2

rightKeys.length = 1





The same configuration works fine when I am doing



Parent p = new Parent("Silvester","Stallone");

Query query = new QueryByIdentity(p);

p = broker.getObjectByQuery(query);

p.getAllChildren() -> SUCCESS!!!





Please advice if it is a bug or... I am not doing something right,



Thank you!



Sergey









**********************
** LEGAL DISCLAIMER **
**********************

This E-mail message and any attachments may contain
legally privileged, confidential or proprietary
information. If you are not the intended recipient(s),
or the employee or agent responsible for delivery of
this message to the intended recipient(s), you are
hereby notified that any dissemination, distribution
or copying of this E-mail message is strictly
prohibited. If you have received this message in
error, please immediately notify the sender and
delete this E-mail message from your computer.

Reply via email to