Nice idea, I was so blinded by my initial model that I didn't want to get rid of the class 'Element', this is probably the solution (well I really hope so).
Thanks a lot ! Alexandre ----- Original Message ----- From: "Jakob Braeuchi" <[EMAIL PROTECTED]> To: "OJB Users List" <[email protected]> Sent: Monday, June 13, 2005 8:10 PM Subject: Re: Oracle exception: column ambiguously defined - need help > hi alexandre, > > my first suggestion is to use a simpler mapping: > use separate tables for 'fichier' and 'folder' and forget the table > 'element'. this has of course a disadvantage: you'll have to define all > common attributes at least twice. > > please have a look at repository_junit_reference.xml > > jakob > > [EMAIL PROTECTED] schrieb: >> Dear OJB Users, >> Dear Jakob, >> >> I really need advice on how to map correctly my java classes >> in OJB. >> >> I want to model a filesystem. I have an 'Element' class which >> defines the unit of the filesystem. An 'Element' can be a 'File' or >> a 'Folder'; these 2 classes extend the 'Element' class. The 'Folder' >> class contains a collection of 'Folder' and a collection of 'Fichier'. >> >> My question is: How can I write the class-descriptors (especially the >> collection >> descriptor) to represent the 'Folder' containing 'Folder' objects and 'Fichier' >> object? >> Is it possible ? >> >> I really tried hard but when querying 'Folder' objects, Oracle always raises >> a 'column ambiguously defined' exception. >> >> I tried to put an alias on my Criteria when building the query but it doesn't >> solve the problem. OJB keep generating a bad query. I think my way of mapping >> is wrong, please tell me how you would do. I don't think the database is the >> problem because the troubles appear when OJB generates this wrong query. >> >> Thanks again, >> >> Alexandre >> >> >> ----- Original Message ----- >> From: "Jakob Braeuchi" <[EMAIL PROTECTED]> >> To: "OJB Users List" <[email protected]> >> Sent: Sunday, June 12, 2005 5:43 PM >> Subject: Re: Oracle exception: column ambiguously defined - need help >> >> >> >>>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 >>> >>>[EMAIL PROTECTED] 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" <[EMAIL PROTECTED]> >>>>To: "OJB Users List" <[email protected]> >>>>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 >>>>> >>>>>[EMAIL PROTECTED] 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" <[EMAIL PROTECTED]> >>>>>>To: "OJB Users List" <[email protected]> >>>>>>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 >>>>>>> >>>>>>>[EMAIL PROTECTED] 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" <[EMAIL PROTECTED]> >>>>>>>>To: "OJB Users List" <[email protected]> >>>>>>>>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 >>>>>>>>> >>>>>>>>>[EMAIL PROTECTED] 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
