hi dariusz,

the problem is that Foo points to Test which has no collection descriptor named 'test' not even a field with this name.

have you tried modifying getAttributeDescriptorsForPath so it accepts the path hints ?
if not, can you please send me a test case for this pattern.


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]



Reply via email to