Bon c'est un peu compliqué mon histoire et je vais essayer d'etre concis
J'ai défini un mapping d'héritage comme ceci
Code:
<hibernate-mapping>
<class name="...entities.TformationImpl" table="TFORMATION" schema="DB">
<id name="Id" type="java.lang.Long">
<column name="FORMATION_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_TFORMATION</param>
</generator>
</id>
<discriminator column="FORMATION_TYPE" type="java.lang.String" length="1"/>
...
<subclass name="...entities.TsessionImpl" discriminator-value="S">
<join table="TSESSION">
<key column="FORMATION_ID"/>
<many-to-one name="cycle" lazy="false" class="...entities.TcycleImpl" cascade="evict" fetch="select">
<column name="CYCLE_ID" precision="22" scale="0" not-null="false" />
</many-to-one>
</join>
</subclass>
<subclass name="....TactiviteImpl" discriminator-value="A">
<join table="TACTIVITE">
<key column="FORMATION_ID"/>
....
</join>
</subclass>
</class>
</hibernate-mapping>
Ce qui me donne trois tables TFORMATION, TSESSION et TACTIVITE avec comme clés le FORMATION_ID. J'ai aussi un héritage de mes objets correctement générés vc hiberntate tools. Vous notterez que j'ai viré toutes les propriétés sauf ma relation vers CYCLE. Dans la table TSESSION j'ai donc un CYCLE_ID avec une foreign key vers ma table TCYCLE dont voila le mapping
Code:
<hibernate-mapping>
<class name="...entities.TcycleImpl" table="TCYCLE" schema="DB">
<id name="Id" type="java.lang.Long">
<column name="CYCLE_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_CYCLE</param>
</generator>
</id>
...
<set name="tsession" lazy="false" inverse="true" >
<key>
<column name="CYCLE_ID" precision="22" scale="0" not-null="true" />
</key>
<one-to-many class="...entities.TsessionImpl" />
</set>
</class>
</hibernate-mapping>
Donc dans ce mapping je défini une relation inverse vers mon entité session.
Or le problème c'est lorsque j'execute mon code me permettant de rechecher ls cycles (je vous passe les détails je ne pense pas que cela soit important, peut etre me direz vous le contraire), hibernate (le c*n) me génère la requete suivante :
Code:
select tsession0_.CYCLE_ID as CYCLE22_1_, ...
from DB_GIRAF.TFORMATION tsession0_ inner join TSESSION tsession0_1_ on tsession0_.FORMATION_ID=tsession0_1_.FORMATION_ID
where tsession0_.CYCLE_ID=?
WTF? d'ou est-ce qu'il peut comprendre dans ce que je lui ai mis que mon CYCLE_ID se trouve dans la table TFORMATION, j'avoue etre à court d'idées (j'ai meme essayé d'allumer un cierge).
Si vous avez une idée, a votre bon coeur messieurs dames.
@+
Julien