Hi,
It seems when i use a n-m relation to a subclassed object, the sql produced
by ojb is not good.
The interesting part of our mapping :
(note that the problem is because VersionJeuLimites inherits from Version
not because VersionPdS inherits also from Version.)
<class-descriptor class="com.inetpsa.suq.referentiel.pds.model.Version"
table="SUQQTVER">
<field-descriptor name="id"
column="VER_ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
access="readonly"/>
<field-descriptor column="VER_NUMERO" jdbc-type="INTEGER"
name="version"/>
</class-descriptor>
<class-descriptor
class="com.inetpsa.suq.referentiel.pds.model.limite.VersionJeuLimites"
table="SUQQTVJL">
<field-descriptor name="id"
column="VJL_VER_IDREF"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"/>
<reference-descriptor name="super"
class-ref="com.inetpsa.suq.referentiel.pds.model.Version"
auto-retrieve="true"
auto-update="true"
auto-delete="true"
>
<foreignkey field-ref="id"/>
</reference-descriptor>
<field-descriptor column="VJL_VAL_NOMINAL" jdbc-type="REAL"
name="valeurNominale"/>
<field-descriptor column="VJL_VAL_SURV_SUP" jdbc-type="REAL"
name="limiteSurveillanceSup"/>
<field-descriptor column="VJL_VAL_SURV_INF" jdbc-type="REAL"
name="limiteSurveillanceInf"/>
<field-descriptor column="VJL_VAL_TOL_SUP" jdbc-type="REAL"
name="limiteSup"/>
<field-descriptor column="VJL_VAL_TOL_INF" jdbc-type="REAL"
name="limiteInf"/>
</class-descriptor>
<class-descriptor class="com.inetpsa.suq.referentiel.pds.model.VersionPdS"
table="SUQQTVPS">
<field-descriptor name="id"
column="VPS_VER_IDREF"
jdbc-type="INTEGER"
primarykey="true"/>
<reference-descriptor name="super"
class-ref="com.inetpsa.suq.referentiel.pds.model.Version"
auto-retrieve="true"
auto-update="true"
auto-delete="true"
>
<foreignkey field-ref="id"/>
</reference-descriptor>
<collection-descriptor
name="versionsJeuLimite"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="com.inetpsa.suq.referentiel.pds.model.limite.VersionJeuLimites"
auto-retrieve="true"
auto-update="false"
auto-delete="false"
indirection-table="SUQQTL9P"
>
<fk-pointing-to-this-class column="L9P_VPS_VER_IDREF"/>
<fk-pointing-to-element-class column="L9P_VJL_VER_IDREF"/>
</collection-descriptor>
</class-descriptor>
When i load an instance of VersionPdS, ojb tries to load the collection of
VersionJeuLimites.
The bad sql produced is :
SELECT
A0.VJL_VER_IDREF,A0.VJL_JLM_IDREF,A0.VJL_VAL_NOMINAL,A0.VJL_VAL_SURV_SUP,A0.VJL_VAL_SURV_INF,A0.VJL_VAL_TOL_SUP,A0.VJL_VAL_TOL_INF
FROM SUQQTVJL A0,
SUQQTL9P INNER JOIN SUQQTVER A1,SUQQTL9P ON A0.VJL_VER_IDREF=A1.VER_ID
WHERE (SUQQTL9P.L9P_VPS_VER_IDREF = ?) AND A0.VJL_VER_IDREF =
SUQQTL9P.L9P_VJL_VER_IDREF;
I suppose the good sql to produce would be :
SELECT
A0.VJL_VER_IDREF,A0.VJL_JLM_IDREF,A0.VJL_VAL_NOMINAL,A0.VJL_VAL_SURV_SUP,A0.VJL_VAL_SURV_INF,A0.VJL_VAL_TOL_SUP,A0.VJL_VAL_TOL_INF
FROM SUQQTVJL A0 INNER JOIN SUQQTVER A1 ON A0.VJL_VER_IDREF=A1.VER_ID,
SUQQTL9P
WHERE (SUQQTL9P.L9P_VPS_VER_IDREF = ?) AND A0.VJL_VER_IDREF =
SUQQTL9P.L9P_VJL_VER_IDREF;
So, is it an ojb bug ? What do you recommend ?
Nicolas DELAHAYE, Dimitri GOUX
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]