Hibernate version: 3.0.5
J'ai une classe Param qui a deux sous classes UserParam et ItemParam,
implémenté par un mapping dit le plus efficace soit des subclass avec discriminateur (chap 9.1.1 dans la doc)
J'ai une classe User qui a un set de UserParam et une classe Item qui a un set d'ItemParam. (mapping ci-dessous)
J'ai 3 tables :
Code:
Item (id, descr)
User (id, username)
et Param (id, idExt, discriminator, cc1)
bien entendu j'ai un User qui a son ID = 1 et un Item qui a son ID = 1,
et des paramêtres pour tous mes User et mes Item.
quand je remonte la liste des paramêtres associés au User ayant l'ID=1, bien que la classe des objets dans la collection devrait être des UserParam,
je me retrouve avec tous les paramêtres tel que idExt = 1, soit un mélange de paramêtre de User et d'Item.
La requète générée par Hibernate contient uniquement un "select where idExt=1" sans filtre sur discriminator.
est-ce un bug ou un mauvais usage de ma part ?
Code:
<class name="Item" table="item" discriminator-value="C" >
<id name="id" type="long">
<generator class="native"/>
</id>
<property name="descr" type="string" not-null="true" />
<set name="params" cascade="all-delete-orphan">
<key column="idExt" not-null="true"/>
<one-to-many class="ItemParam"/>
</set>
</class>
<class name="User" table="user" discriminator-value="C" >
<id name="id" type="long">
<generator class="native"/>
</id>
<property name="username" type="string" not-null="true" />
<set name="params" cascade="all-delete-orphan">
<key column="idExt" not-null="true"/>
<one-to-many class="UserParam"/>
</set >
</class>
<class name="Params" table="params" >
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discriminator" type="string" />
<property name="cc1" type="string" not-null="true" />
<subclass name="ItemParam" discriminator-value="ITEM" />
<subclass name="UserParam" discriminator-value="USER" />
</class>