Hi,

For two tables "testcase" (class Testcase) and "testcase_variable" (class TestcaseVariable) I have defined a 1:n relation and perform a OQLQuery on the "1" side of that relation (which is Testcase).
Table "testcase" contains only one row whereas the table "testcase_variables" contains 2 rows whose foreign key matches the primary key of the row in "testcase":


mysql> select id from testcase;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> select * from testcase_variable;
+----+-------------+-----------------+-------------------------+
| id | testcase_id | label           | description             |
+----+-------------+-----------------+-------------------------+
|  1 |           1 | Geschwindigkeit | Palettengeschwindigkeit |
|  2 |           1 | Versuch         | Versuch                 |
+----+-------------+-----------------+-------------------------+

I would expect the query below to return ONE Testcase object and the testcase object to contain TWO TestcaseVariable objects.
Actually results.size() returns 2 and testcase.getTestcaseVariables().size() returns 1 - exactly the opposite of what I would have expected.
What am I doing wrong??? I found some examples of 1:n relations but I'm doing the query the same way the do using the same kind of mapping to express the 1:n relation.



OQLQuery oql = db.getOQLQuery("SELECT tc FROM com.ibm.rfid.testcontroller.testcase.Testcase tc WHERE source = $1");
oql.bind(urlString);
QueryResults results = oql.execute();
logger.debug("Number of testcases: " + results.size());
while(results.hasMore()) {
testcase = (Testcase) results.next();
logger.debug("Number of testcase variables: " + testcase.getTestcaseVariables().size());
}



The relevant section of the mapping descriptor looks like this:

<class name="com.ibm.rfid.testcontroller.testcase.Testcase" identity="id" key-generator="MAX">
<cache-type type="none"/>
<map-to table="testcase" xml="testcase"/>
<field name="testcaseVariables" type="com.ibm.rfid.testcontroller.testcase.TestcaseVariable" collection="vector">
<sql many-key="testcase_id"/>
<bind-xml name="testcase-variable" node="element"/>
</field>
<!-- field name="testRuns" type="com.ibm.rfid.testcontroller.TestRun" collection="vector">
<sql many-key="testcase_id"/>
<bind-xml name="testcase-run" node="element"/>
</field -->
<field name="id">
<sql name="id"/>
<bind-xml name="id" node="attribute"/>
</field>
<field name="source">
<sql name="source"/>
<bind-xml name="source" node="attribute"/>
</field>
<field name="description">
<sql name="description"/>
<bind-xml name="description" node="attribute"/>
</field>
</class>


<class name="com.ibm.rfid.testcontroller.testcase.TestcaseVariable" identity="id" key-generator="MAX">
<cache-type type="none"/>
<map-to table="testcase_variable" xml="testcase-variable"/>
<field name="testcase" type="com.ibm.rfid.testcontroller.testcase.Testcase">
<sql name="testcase_id" />
<bind-xml name="testcase-id" node="element" reference="true"/>
</field>
<field name="valueRange" type="com.ibm.rfid.testcontroller.testcase.ValueRange">
<bind-xml name="value-range" node="element"/>
</field>
<field name="id">
<sql name="id"/>
<bind-xml name="id" node="attribute"/>
</field>
<field name="label">
<sql name="label"/>
<bind-xml name="label" node="attribute"/>
</field>
<field name="description">
<sql name="description"/>
<bind-xml name="description" node="attribute"/>
</field>
</class>




Below is the logging of the query code snipped above:


2004-08-06 17:38:30,989 DEBUG [main] engine.SQLEngine (SQLEngine.java:384) - Create SQL: SELECT testcase.id,testcase_variable.id,testcase.source,testcase.description FROM testcase LEFT OUTER JOIN testcase_variable ON testcase.id=testcase_variable.testcase_id WHERE (testcase.source = ?)
2004-08-06 17:38:31,380 DEBUG [main] engine.SQLEngine$SQLQuery (SQLEngine.java:1699) - jdo.executing
2004-08-06 17:38:31,410 DEBUG [main] testcase.TestcaseFactory (TestcaseFactory.java:57) - Number of testcases: 2
2004-08-06 17:38:31,420 DEBUG [main] cache.NoCache (NoCache.java:122) - Removing cache entry for key com.ibm.rfid.testcontroller.testcase.Testcase/1
2004-08-06 17:38:31,450 DEBUG [main] cache.NoCache (NoCache.java:122) - Removing cache entry for key com.ibm.rfid.testcontroller.testcase.TestcaseVariable/1
2004-08-06 17:38:31,450 DEBUG [main] engine.SQLEngine (SQLEngine.java:1020) - Loading class: com.ibm.rfid.testcontroller.testcase.TestcaseVariable using SQL: SELECT testcase_variable.testcase_id,variable_value_range.id,testcase_variable.label,testcase_variable.description FROM testcase_variable LEFT OUTER JOIN variable_value_range ON testcase_variable.id=variable_value_range.id WHERE testcase_variable.id=?
2004-08-06 17:38:31,460 DEBUG [main] cache.NoCache (NoCache.java:122) - Removing cache entry for key com.ibm.rfid.testcontroller.testcase.ValueRange/1
2004-08-06 17:38:31,460 DEBUG [main] engine.SQLEngine (SQLEngine.java:1020) - Loading class: com.ibm.rfid.testcontroller.testcase.ValueRange using SQL: SELECT variable_value_range.testcase_variable_id,variable_value_range.minValue,variable_value_range.maxValue,variable_value_range.increment,variable_value_range.unit FROM variable_value_range WHERE variable_value_range.id=?
2004-08-06 17:38:31,470 DEBUG [main] persist.LockEngine (LockEngine.java:370) - Loading class: com.ibm.rfid.testcontroller.testcase.ValueRange with id: 1
2004-08-06 17:38:31,470 DEBUG [main] persist.LockEngine (LockEngine.java:370) - Loading class: com.ibm.rfid.testcontroller.testcase.TestcaseVariable with id: 1
2004-08-06 17:38:31,470 DEBUG [main] persist.LockEngine (LockEngine.java:370) - Loading class: com.ibm.rfid.testcontroller.testcase.Testcase with id: 1
2004-08-06 17:38:31,490 DEBUG [main] testcase.TestcaseFactory (TestcaseFactory.java:60) - Number of testcase variables: 1
2004-08-06 17:38:31,500 DEBUG [main] persist.ObjectLock (ObjectLock.java:821) - Release com.ibm.rfid.testcontroller.testcase.Testcase/1/0 R/- by [EMAIL PROTECTED]
2004-08-06 17:38:31,500 DEBUG [main] cache.NoCache (NoCache.java:93) - Creating cache entry for key com.ibm.rfid.testcontroller.testcase.Testcase/1 with value com.ibm.rfid.testcontroller.testcase.Testcase/1/0 -/-
2004-08-06 17:38:31,510 DEBUG [main] cache.NoCache (NoCache.java:157) - Disposing object com.ibm.rfid.testcontroller.testcase.Testcase/1/0 -/-
2004-08-06 17:38:31,510 DEBUG [main] persist.ObjectLock (ObjectLock.java:821) - Release com.ibm.rfid.testcontroller.testcase.TestcaseVariable/1/1 R/- by [EMAIL PROTECTED]
2004-08-06 17:38:31,510 DEBUG [main] cache.NoCache (NoCache.java:93) - Creating cache entry for key com.ibm.rfid.testcontroller.testcase.TestcaseVariable/1 with value com.ibm.rfid.testcontroller.testcase.TestcaseVariable/1/1 -/-
2004-08-06 17:38:31,520 DEBUG [main] cache.NoCache (NoCache.java:157) - Disposing object com.ibm.rfid.testcontroller.testcase.TestcaseVariable/1/1 -/-
2004-08-06 17:38:31,520 DEBUG [main] persist.ObjectLock (ObjectLock.java:821) - Release com.ibm.rfid.testcontroller.testcase.ValueRange/1/2 R/- by [EMAIL PROTECTED]
2004-08-06 17:38:31,520 DEBUG [main] cache.NoCache (NoCache.java:93) - Creating cache entry for key com.ibm.rfid.testcontroller.testcase.ValueRange/1 with value com.ibm.rfid.testcontroller.testcase.ValueRange/1/2 -/-
2004-08-06 17:38:31,520 DEBUG [main] cache.NoCache (NoCache.java:157) - Disposing object com.ibm.rfid.testcontroller.testcase.ValueRange/1/2 -/-




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

Reply via email to