db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jakob Braeuchi <jbraeu...@gmx.ch>
Subject Re: Oracle exception: column ambiguously defined - need help
Date Sun, 12 Jun 2005 15:43:43 GMT
hi alexandre ;)

well, you could try it with hsqldb that is shipped with ojb.
but i think the problem is that both relationships use the same 
indirection table and ojb lists it only once in the select. you could 
try setting a user-alias for the relationships prevent ojb from using 
the same alias twice.
http://db.apache.org/ojb/docu/guides/query.html#user+defined+alias


hth
jakob

thomas0@etu.unige.ch schrieb:
> 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
> 
> 

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