I'm using rc1 version. -----Original Message----- From: Jakob Braeuchi [mailto:[EMAIL PROTECTED] Sent: quarta-feira, 2 de Abril de 2003 18:06 To: OJB Users List Subject: Re: Invalid argument value: Not unique table/alias: 'A1'
hi Jo�o, what version of ojb do you use ? jakob Jo�o Luz wrote: >Hi, > >Look to this simple case: > A --- AB --- B ---- C > | > D >1- A got a M:N relation with B >2 - B got a 1:M to C and D > >The M:N relationship is implemented with collections (indirection-table AB). > >If I want to get "All A's that have B's associated that have C's and D's >with some property equals to something", i.e, if I do this OQL query: > select all from A.class.getName() where bs.cs.idInternal = $1 and >bs.ds.idInternal = $2 > >The execution result of this query is this: > SELECT A0.name,A0.idInternal > FROM A A0 INNER JOIN AB A1 ON A0.idInternal=A1.keyA > INNER JOIN B A2 ON A1.keyB=A2.idInternal > INNER JOIN AB A1 ON A0.idInternal=A1.keyA > INNER JOIN B A2 ON A1.keyB=A2.idInternal > WHERE ( A2.idInternal = ? ) AND (A2.idInternal = ? ) > >Well this don't works because A1 alias is duplicated. The error tells me >that: >ERROR [main] (?:?) - SQLException during the execution of the query (for a >A): Invalid argument value: Not unique table/alias: 'A1' >java.sql.SQLException: Invalid argument value: Not unique table/alias: 'A1' > at com.mysql.jdbc.MysqlIO.sendCommand(Unknown Source) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(Unknown Source) > at com.mysql.jdbc.Connection.execSQL(Unknown Source) > at com.mysql.jdbc.PreparedStatement.executeQuery(Unknown Source) > at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown >Source) > at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown Source) > at >org.apache.ojb.broker.singlevm.RsIteratorFactoryImpl.createRsIterator(Unkno w >n Source) > at >org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getRsIteratorFromQuery ( >Unknown Source) > at >org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getIteratorFromQuery(U n >known Source) > at >org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(U n >known Source) > at >org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(U n >known Source) > at >org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getCollectionByQuery(U n >known Source) > at >org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.getCollectionByQ u >ery(Unknown Source) > at org.apache.ojb.odmg.oql.OQLQueryImpl.execute(Unknown Source) > at Main.main(Main.java:54) > >Well, my question is: Am I doing something wrong or sqlGenerator got a >bug/feature? :) > >Thanks in advance > Jo�o > >PS: Mapping is below: > ><class-descriptor class="A" table="A"> > <field-descriptor > name="idInternal" > column="idInternal" > jdbc-type="INTEGER" > primarykey="true" > autoincrement="true" > id="1" > /> > <field-descriptor > name="name" > column="name" > jdbc-type="VARCHAR"/> > <collection-descriptor name="bs" element-class-ref="B" >indirection-table="AB"> > <fk-pointing-to-this-class column="keyA" /> > <fk-pointing-to-element-class column="keyB" /> > </collection-descriptor> ></class-descriptor> ><class-descriptor class="B" table="B"> > <field-descriptor name="idInternal" column="idInternal" >jdbc-type="INTEGER" primarykey="true" autoincrement="true"/> > > > <field-descriptor name="name" column="name" jdbc-type="VARCHAR"/> > > <collection-descriptor name="cs" element-class-ref="C" proxy="true"> > <inverse-foreignkey field-ref="idB"/> > </collection-descriptor> > <collection-descriptor name="ds" element-class-ref="D" proxy="true"> > <inverse-foreignkey field-ref="idB"/> > </collection-descriptor> > <collection-descriptor name="as" element-class-ref="A" >indirection-table="AB"> > <fk-pointing-to-this-class column="keyB" /> > <fk-pointing-to-element-class column="keyA" /> > </collection-descriptor> ></class-descriptor> > ><class-descriptor class="C" > table="C"> > <field-descriptor > name="idInternal" > column="idInternal" > jdbc-type="INTEGER" > primarykey="true" > autoincrement="true" > /> > > <field-descriptor name="idB" column="keyB" jdbc-type="INTEGER"/> > > <reference-descriptor name="b" class-ref="B"> > <foreignkey field-ref="keyB"/> > </reference-descriptor> > ></class-descriptor> > ><class-descriptor class="D" table="D"> > <field-descriptor > name="idInternal" > column="idInternal" > jdbc-type="INTEGER" > primarykey="true" > autoincrement="true" > /> > > <field-descriptor name="idB" column="keyB" jdbc-type="INTEGER"/> > <reference-descriptor name="b" class-ref="B"> > <foreignkey field-ref="idB"/> > </reference-descriptor> ></class-descriptor> > >PS2:Now the database sql: >/* >Mascon Dump >Source Host: localhost >Source Server Version: 3.23.53-max-nt >Source Database: testDB >Date: 2003-04-01 11:35:58 >*/ > >use testDB ; >#---------------------------- ># Table structure for A >#---------------------------- >drop table if exists A; >create table A ( > idInternal int(11) not null default '0', > name varchar(50) not null, > primary key (idInternal)) > type=MyISAM; > >#---------------------------- ># Table structure for AB >#---------------------------- >drop table if exists AB; >create table AB ( > keyA int(11) not null default '0', > keyB int(11) not null default '0') > type=MyISAM; > >#---------------------------- ># Table structure for B >#---------------------------- >drop table if exists B; >create table B ( > idInternal int(11) not null default '0', > keyA int(11) not null default '0', > name varchar(50) not null, > primary key (idInternal)) > type=MyISAM; > >#---------------------------- ># Table structure for C >#---------------------------- >drop table if exists C; >create table C ( > idInternal int(11) not null default '0', > keyB int(11) not null default '0', > primary key (idInternal)) > type=MyISAM; > >#---------------------------- ># Table structure for D >#---------------------------- >drop table if exists D; >create table D ( > idInternal int(11) not null default '0', > keyB int(11) not null default '0', > primary key (idInternal)) > type=MyISAM; > > > >--------------------------------------------------------------------- >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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
