i'm thinking of the following solution to this problem:
a.) pass the hints to getAttributeDescriptorsForPath
b.) in getAttributeDescriptorsForPath i'd like to scan the extents if a descriptor can't be found in the class.
what do you think ?
jakob
Dariusz Kies wrote:
Hi,
Here is the sql for 3: [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: SELECT A0.ID,A0.ID_TEST FROM FI.T_FOO A0,FI.T_TEST_SUITE A1 WHERE A0.ID_TEST=A1.ID AND (caseName = ? )
Notice that there isn't the column name for the caseName attribute and there
isn't join with FI.T_TEST_CASE.
I debug a little and I found that a problem is in the class
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement, method getTableAlias
and call descriptors = getRoot().cld.getAttributeDescriptorsForPath(aPath); // line 655
This call return only one
element:[EMAIL PROTECTED]
delete=false,cascade retrieve=true,cascade store=false,is
lazy=false,class of Items=class Test]]
It should return three descriptors: TestSuite, TestCase and caseName. Method getAttributeDescriptorsForPath don't consider the "addPathClass" that's
way it can't return the good descriptors.
Thanks for help Dariusz Kies
--- Jakob Braeuchi <[EMAIL PROTECTED]> wrote:
hi dariusz,
what is the problem with sample 3 ? can you pleas post the sql or an error message ?
jakob
Dariusz Kies wrote:
Hi,
I have a problem to query on composite pattern in OJB (db-ojb-1.0.rc1). Let's assume that I have Test composite pattern from JUnit in OJB:
<class-descriptor class="Test" ...> <extent-class class-ref="TestCase" /> <extent-class class-ref="TestSuite" /> <field-descriptor name="id" primarykey="true" autoincrement="true" ... /> <field-descriptor name="idTest" ... /> </class-descriptor>
<class-descriptor class="TestCase" ...> <field-descriptor name="id" primarykey="true" autoincrement="true" ... /> <field-descriptor name="idTest" ... /> <field-descriptor name="caseName" jdbc-type="VARCHAR" ... /> </class-descriptor>
<class-descriptor class="TestSuite" ...> <field-descriptor name="id" primarykey="true" autoincrement="true" ... /> <field-descriptor name="idTest" ... /> <field-descriptor name="suiteName" jdbc-type="VARCHAR" ... /> <collection-descriptor name="test" element-class-ref="Test" ...> <inverse-foreignkey field-ref="idTest"/> </collection-descriptor> </class-descriptor>
<class-descriptor class="Foo" ...> <field-descriptor name="id" primarykey="true" autoincrement="true" ... /> <field-descriptor name="idTest" ... /> <reference-descriptor name="test" class-ref="Test" ...> <foreignkey field-ref="idTest"/> </reference-descriptor> </class-descriptor>
1. This works ok: Criteria crit = new Criteria(); crit.addEqualTo("test.caseName", "test 1"); Query query = QueryFactory.newQuery(Foo.class, crit); query.addPathClass("test", TestCase.class); Collection results = broker.getCollectionByQuery(query);
2. This don't work: Criteria crit = new Criteria(); crit.addEqualTo("test.test.caseName", "test 2"); Query query = QueryFactory.newQuery(Foo.class, crit); query.addPathClass("test", TestSuite.class); // first test query.addPathClass("test", TestCase.class); // second test Collection results = broker.getCollectionByQuery(query);
3. Still doesn't work:
<class-descriptor class="Foo" ...> <field-descriptor name="id" primarykey="true" autoincrement="true" ... /> <reference-descriptor name="aTest" class-ref="Test" ...> <foreignkey field-ref="idTest"/> </reference-descriptor> </class-descriptor>
Criteria crit = new Criteria(); crit.addEqualTo("aTest.test.caseName", "test 3"); Query query = QueryFactory.newQuery(Foo.class, crit); query.addPathClass("aTest", TestSuite.class); query.addPathClass("test", TestCase.class); Collection results = broker.getCollectionByQuery(query);
Can I query on composite pattern in OJB?
Thanks for help Dariusz Kies
__________________________________________________ Do you Yahoo!? Yahoo! Web Hosting - establish your business online http://webhosting.yahoo.com
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
__________________________________________________ Do you Yahoo!? Yahoo! Platinum - Watch CBS' NCAA March Madness, live on your desktop! http://platinum.yahoo.com
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]