db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From thom...@etu.unige.ch
Subject Re: Oracle exception: column ambiguously defined - need help
Date Sun, 12 Jun 2005 13:57:50 GMT
Hello OJB Users,
Hello Jakob

I couldn't try on any other database since I only have access to an Oracle one
(and my application must run on a Oracle database).

Here's the query generated by OJB:

SELECT A0.ID_FOLDER 
FROM FM.FOLDER A0,INFOLD,FM.element A1,INFOLD 
WHERE A0.ID_FOLDER=A1.ID_ELEMENT 
AND ((INFOLD.FOL_ID_ELEMENT IN (1084, 1068, 1088)) 
AND A0.ID_FOLDER = INFOLD.ID_ELEMENT);

As you can see, the INFOLD.FOL_ID_ELEMENT and the INFOLD.ID_ELEMENT
are the ambiguous columns since the INFOLD table is not suffixed in the query.

This query would work:

SELECT A0.ID_FOLDER 
FROM FM.FOLDER A0,INFOLD A2,FM.element A1,INFOLD A3
WHERE A0.ID_FOLDER=A1.ID_ELEMENT 
AND ((A2.FOL_ID_ELEMENT IN (1084, 1068, 1088)) 
AND A0.ID_FOLDER = A3.ID_ELEMENT);

Thanks in advance for any explanations.

Alexandre Thomas

(by the way Thomas is my surname :-)

----- Original Message ----- 
From: "Jakob Braeuchi" <jbraeuchi@gmx.ch>
To: "OJB Users List" <ojb-user@db.apache.org>
Sent: Saturday, June 11, 2005 8:06 PM
Subject: Re: Oracle exception: column ambiguously defined - need help


> hi thomas,
> 
> does the error only occur when using oracle ?
> which column is ambiguous ?
> 
> jakob
> 
> thomas0@etu.unige.ch schrieb:
>> Thanks for correcting my wrong use of criterias.
>> 
>> Unfortunately this doesn't solve my problem.
>> 
>> Let me explain my situation with more details. 
>> 
>> I want to model a filesystem with java classes.
>> 
>> First there's the Element class. Then there's the Fichier (File in french)
>> class
>> and the Folder class who inherits from Element.
>> 
>> I want the Folder class to have a collection of Fichiers and a collection of
>> Folders to represent the Elements contained in each folder.
>> 
>> I want also to do a cross-link by having a collection in the Element class
to
>> represent the list of containers for an Element.
>> 
>> Here's an image of the structure: 
>> http://www.ashtom.net/img/objectLayerStructure.gif
>> 
>> Here's a representation of the database structure:
>> http://www.ashtom.net/img/database_model.gif
>> 
>> Here's the repository who fits at best with what I want to represent with my
>> model: 
>> http://www.ashtom.net/files/not_working_repository.xml
>> 
>> Unfortunately, this repository raises an Oracle exception (ORA-00918: column
>> ambiguously defined).
>> 
>> On the second hand, this configuration below works but it doesn't allow to
my
>> application to differentiate a Folder from a Fichier:
>> http://www.ashtom.net/files/working_repository.xml
>> 
>> I know this is a lot of trouble but I really don't know how to solve this
>> problem.
>> 
>> Thanks a lot for your help !
>> 
>> Alexandre
>> 
>> ----- Original Message ----- 
>> From: "Jakob Braeuchi" <jbraeuchi@gmx.ch>
>> To: "OJB Users List" <ojb-user@db.apache.org>
>> Sent: Friday, June 10, 2005 6:18 PM
>> Subject: Re: Oracle exception: column ambiguously defined - need help
>> 
>> 
>> 
>>>hi thomas,
>>>
>>>if the attribute is named 'InRoot' then you should use this name in the 
>>>query and not the name of the column !
>>>
>>>jakob
>>>
>>>thomas0@etu.unige.ch schrieb:
>>>
>>>>Thanks for answering me,
>>>>
>>>>The two m:n relations from are here because I wanted my application (a JSF

>>>>application) to differentiate a "matis.component.filemanager.Fichier" from
a
>> 
>> 
>>>>"matis.component.filemanager.Folder", so I can use methods specific to each
>>>>class.
>>>>For the query part, there's actually a "InRoot" attribute (a boolean)
>> 
>> described
>> 
>>>>in my repository in the
>>>>"matis.component.filemanager.Element" (which is the parent class of Fichier
>> 
>> and
>> 
>>>>Folder) class descriptor. 
>>>>
>>>>extract of Element class descriptor:
>>>>
>>>>      <field-descriptor
>>>>         name="InRoot"
>>>>         column="INROOT"
>>>>         jdbc-type="INTEGER"
>>>>        
>>>>
>> 
>>
conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion"/>
>> 
>>>>How could I build a query with this attribute (as it is a boolean I don't
>> 
>> know
>> 
>>>>how to compare InRoot with a boolean).
>>>>
>>>>Thanks again for your help,
>>>>
>>>>Alexandre
>>>>
>>>>
>>>>----- Original Message ----- 
>>>>From: "Jakob Braeuchi" <jbraeuchi@gmx.ch>
>>>>To: "OJB Users List" <ojb-user@db.apache.org>
>>>>Sent: Wednesday, June 08, 2005 6:56 PM
>>>>Subject: Re: Oracle exception: column ambiguously defined - need help
>>>>
>>>>
>>>>
>>>>
>>>>>hi alexandre,
>>>>>
>>>>>the mapping looks a little strange to me. From Folder you have two m:n

>>>>>relationships pointing to different classes, but both use the same 
>>>>>indirection table. another thing is the attribute 'INROOT' in the 
>>>>>criteria. there's no such attribute defined in the class-descriptor of

>>>>>class 'Folder'. the attributes used in a query are usually attributesof

>>>>>the class not columns.
>>>>>
>>>>>jakob
>>>>>
>>>>>thomas0@etu.unige.ch schrieb:
>>>>>
>>>>>
>>>>>>Hello,
>>>>>>
>>>>>>My name is Alexandre and I'm a student in the University of Geneva
in the
>>>>>>Information Systems departement.
>>>>>>
>>>>>>I'm currently working on a web application using an OJB layer. I have
a
>>>>>>problem of column ambiguously defined when querying my Oracle Database
>>>>
>>>>through
>>>>
>>>>
>>>>>>OJB's QueryFactory method. I read Jakob Braeuchi's  answer to Naveen
>>>>
>>>>regarding
>>>>
>>>>
>>>>>>column prefixes.
>>>>>>Unfortunately, I didn't quite understand his solution: how can I base
>>>>
>>>>columns
>>>>
>>>>
>>>>>>on
>>>>>>attributes?
>>>>>>
>>>>>>here is the method querying the database:
>>>>>>
>>>>>>PersistenceBroker broker =
>>>>>>PersistenceBrokerFactory.defaultPersistenceBroker();
>>>>>>       Collection rootelements = null;
>>>>>>       Criteria crit = new Criteria();
>>>>>>       crit.addEqualTo("INROOT","1");
>>>>>>       Query q = QueryFactory.newQuery(Folder.class, crit);      
 
>>>>>>       try{
>>>>>>           rootelements = broker.getCollectionByQuery(q);
>>>>>>       }
>>>>>>       catch(PersistenceBrokerException e)
>>>>>>       {
>>>>>>           e.printStackTrace();
>>>>>>           if(broker != null) broker.abortTransaction();
>>>>>>       }
>>>>>>       finally
>>>>>>       {
>>>>>>           if (broker != null) broker.close();
>>>>>>       }
>>>>>>
>>>>>>And here is the part of the relevant repository:
>>>>>>
>>>>>> <class-descriptor
>>>>>>   schema="FM"   
>>>>>>   class="matis.component.filemanager.Folder" 
>>>>>>   table="FOLDER">
>>>>>>   
>>>>>>     <field-descriptor
>>>>>>        name="id_Elem"
>>>>>>        column="ID_FOLDER"
>>>>>>        jdbc-type="INTEGER"
>>>>>>        primarykey="true"/>
>>>>>>     
>>>>>>      <collection-descriptor
>>>>>>        name="fichiersContained" 
>>>>>>
>>>>
>>>>
>>
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>> 
>>>>>>        element-class-ref="matis.component.filemanager.Fichier"
>>>>>>        auto-retrieve="true"
>>>>>>        auto-update="true"
>>>>>>        auto-delete="true"
>>>>>>        indirection-table="INFOLD">
>>>>>>        <fk-pointing-to-this-class column="FOL_ID_ELEMENT"/>
>>>>>>        <fk-pointing-to-element-class column="ID_ELEMENT"/>
>>>>>>      </collection-descriptor>
>>>>>>     
>>>>>>      <collection-descriptor
>>>>>>        name="foldersContained" 
>>>>>>
>>>>
>>>>
>>
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>> 
>>>>>>        element-class-ref="matis.component.filemanager.Folder"
>>>>>>        auto-retrieve="true"
>>>>>>        auto-update="true"
>>>>>>        auto-delete="true"
>>>>>>        indirection-table="INFOLD">
>>>>>>        <fk-pointing-to-this-class column="FOL_ID_ELEMENT"/>
>>>>>>        <fk-pointing-to-element-class column="ID_ELEMENT"/>
>>>>>>      </collection-descriptor>
>>>>>>      
>>>>>>      <reference-descriptor name="super"
>>>>>>        class-ref="matis.component.filemanager.Element"
>>>>>>        auto-retrieve="true"
>>>>>>        auto-update="true"
>>>>>>        auto-delete="true">
>>>>>>       <foreignkey field-ref="id_Elem"/>
>>>>>>   </reference-descriptor>
>>>>>>   
>>>>>>  </class-descriptor>
>>>>>>
>>>>>>When logging OJB's activity, I can see the query who raises the Oracle
>>>>>>exception (ORA-00918: column ambiguously defined), here it is:
>>>>>>
>>>>>>SELECT A0.ID_FOLDER 
>>>>>
>>>>>>FROM FM.FOLDER A0,INFOLD,FM.element A1,INFOLD 
>>>>>
>>>>>>WHERE A0.ID_FOLDER=A1.ID_ELEMENT 
>>>>>>AND ((INFOLD.FOL_ID_ELEMENT IN (?,?,?)) 
>>>>>>AND A0.ID_FOLDER = INFOLD.ID_ELEMENT)
>>>>>>
>>>>>>I'm a bit lost since it's my first time using OJB (I hope it's not
the
>>>>>>last).
>>>>>>
>>>>>>Thanks a lot for reading my request and thanks in advance for your
help.
>>>>>>
>>>>>>Yours Sincerely,
>>>>>>
>>>>>>Alexandre Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Mime
View raw message