Hello

I have a problem with OJB (version 1.0.0) and alias definition in the
SQL statement. I have two tables (T1 and T2) and some off the columns in
these two tables have the same name. When I try to query the first table
with an attribute from the second table I always get this error message
from the DBMS

java.sql.SQLException: ORA-00918: column ambiguously defined

The problem is that OJB doesn't use alias for the first table in the
where clause. Here is an example for the statement:

SELECT A0.COLUMN1,A0.COLUMN2,A0.COLUMN3,A0.COLUMN4
FROM T1 A0,T2 A1 WHERE A0.ID=A1.T1ID AND (( (COLUMN1 = '034') AND
COLUMN2 = '78777') AND  (A1.DATE >= '1900-12-12 12:00:00.0'))

There are no alias definition for the columns COLUMN1 and COLUMN2 but
these columns are defined in both tables. That's the reason why the
ORA-00918 exception is thrown by the DBMS. So is there a way to force
the OJB framework to use alias definitions in the where clause or does
somebody have another solution to fix my problem?

I would really appreciate it if somebody could help me.

Cheers 
Christian

Java code that makes the query:
======================================================
try {
        Criteria c = new Criteria();
        // to set the alias on the criteria objects doesn't help

        // c.setAlias("a1"); 
        c.addColumnEqualTo("COLUMN1","034");
        c.addColumnEqualTo("COLUMN2","78777");
        // Criteria c2 = new Criteria();
        // c2.setAlias("a2"); 
        // c2.addGreaterOrEqualThan("list.read",'1900-12-12
12:00:00.0');
        c.addGreaterOrEqualThan("list.read",'1900-12-12 12:00:00.0');
        // c.addAndCriteria(c2);
            QueryByCriteria query = new QueryByCriteria(A.class, c);
        Collection result = broker.getCollectionByQuery(query);
        return result;
}catch (Exception e) {
        throw new MyException("text",e);
}finally{
        this.closeBroker();
}
=======================================================

Mapping definition from the repository.xml:
=======================================================
<!-- Definition for table T1 -->
<class-descriptor class="A" table="T1">
        <field-descriptor name="t1id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" />
        <field-descriptor name="field1" column="COLUMN1"
jdbc-type="VARCHAR" />
        <field-descriptor name="field2" column="COLUMN2"
jdbc-type="VARCHAR" />
        <field-descriptor name="field3" column="COLUMN3"
jdbc-type="VARCHAR" />
        <field-descriptor name="field4" column="COLUMN4"
jdbc-type="VARCHAR" />
        <collection-descriptor name="list" 
                element-class-ref="B"
                auto-retrieve="true"
                auto-update="none">
         <inverse-foreignkey field-ref="t1id"/>
    </collection-descriptor>
</class-descriptor>

<!-- Definition for table T2 -->
<class-descriptor class="B" table="T2">
        <field-descriptor name="t2id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" />
        <field-descriptor name="t1id" column="T1ID" jdbc-type="INTEGER"
/>
        <field-descriptor name="field1" column="COLUMN1"
jdbc-type="VARCHAR" />
        <field-descriptor name="field2" column="COLUMN2"
jdbc-type="VARCHAR" />
        <field-descriptor name="read" column="DATE"
jdbc-type="TIMESTAMP" />
        <reference-descriptor name="t1"
                class-ref="A"
                auto-retrieve="true"
                auto-update="none">
         <foreignkey  field-ref="t1id" />
    </reference-descriptor>
</class-descriptor>
=======================================================


Reply via email to