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
===