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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]