Bonjour,

Je cherche mais en vain, une solution pour realiser un mapping hibernate gerant une liste/bag/set (collection) pouvant contenir des objets de type different mais heritant de la meme classe. Je sais pas si c'est possible ??


Je m'explique :

Player ----> Rookie
|
|--------> Superstar


Ici les classes rookie, sperstar herite de la classe player. La table player contient un champ (TEAM_ID) qui jouera le role de foreign key.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE  "PLAYER" 
   (	"PLAYER_ID" NUMBER(20,0), 
	"PLAYER_NAME" VARCHAR2(255), 
	"PLAYER_NUMBER" NUMBER(10,0), 
	"TEAM_ID" NUMBER(20,0), 
	 CONSTRAINT "PLAYER_ID_PK" PRIMARY KEY ("PLAYER_ID") ENABLE, 
  )


Ayant deja defini un mapping gerant cet heritage (par n importe quelle solution discriminator /subclass-join /union)
je souhaiterais creer un mapping exemple TEAM, qui contiendra une liste de tous les membres de l equipe (rookie, superstar).

<class name="Team" table="TEAM" lazy="false">
<id name="id" column="TEAM_ID">
<generator class="native">
<param name="sequence">SEQ_TEAM_ID</param>
</generator>
</id>
<property name="name" column="TEAM_NAME"/>
<property name="nbWon" column="NB_WON"/>
<property name="nbLost" column="NB_LOST"/>
<property name="nbPlayed" column="NB_PLAYED"/>

<set name="teamPlayers" cascade="save-update" inverse="true" lazy="false">
<key column="TEAM_ID" />
<one-to-many class="?????" />
</set>

</class>


Je pourrais effectivement creer une liste pour chaque type (rookie, superstar) grace a l attribut class mais ca ne m'interresse pas.

Ou encore une classe qui encapsule la liste des rookie, superstar grace a une association n-aire ? (est ce la seule solution???)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<set name="teamPlayers" cascade="save-update" inverse="true" lazy="false">
    <key column="TEAM_ID" />
 
    <composite-element class="TeamPlayer">
            <one-to-many name="rookies"     class="Rookie"/>
            <one-to-many name="superstars" class="SuperStar"/>
    </composite-element>
 
  </set>

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class TeamPlayer{
 
private List rookies;
private List superstars;
 
...getter, setters.....
}
Merci pour vos lumieres....