HIBERNATE et interface

Fermé
xflamant - 12 févr. 2008 à 20:37
 Vincent - 9 févr. 2009 à 12:21
Bonjour,
je suis en train de mapper un graphe d'objet avec Hibernate et j'emploie à un moment des interfaces. Voici mon problème :

J'ai une classe Page qui contient un HasSet d'interface "ElementPage". C'est une relation one-to-many :

class Page
{
    ......
    private Set<ElementPage> elementPages = new ....()
}

interface ElementPage {....}

J'ai trois classes "Champ", "Bloc" et "Texte" qui implementent l'interface "ElementPage" :

class Champ implements ElementPage 
{
    .......
    private Page page;
}
class Bloc implements ElementPage 
{
    .......
    private Page page;
}
class Texte implements ElementPage 
{
    .......
    private Page page;
}

Mon fichier de mapping pour la classe "Page" est le suivant :

<hibernate-mapping ....>
      <class name="Page" table="t_page" >
             ..............
             <set name="elementPages" inverse="true">
                    <key column="PAGE_ID"  />
                    <one-to-many class="ElementPage" />
             </set>
      </class>
</hibernate-mapping>

Mon fichier de mapping pour la classe "Champ" est le suivant :

<hibernate-mapping ....>
      <class name="Champ" table="t_champ" >
             ..............
             <many-to-one column="PAGE_ID" name="page" class="Page" />
      </class>
 </hibernate-mapping>

Mon fichier de mapping pour la classe "Bloc" est le suivant :

<hibernate-mapping ....>
      <class name="Bloc" table="t_bloc" >
             ..............
             <many-to-one column="PAGE_ID" name="page" class="Page" />
      </class>
 </hibernate-mapping>

Mon fichier de mapping pour la classe "Texte" est le suivant :

<hibernate-mapping ....>
      <class name="Texte" table="t_texte" >
             ..............
             <many-to-one column="PAGE_ID" name="page" class="Page" />
      </class>
 </hibernate-mapping>

En résumé, j'ai une classe "Page" qui a une association (un set) vers plusieurs "ElementPage" qui est elle même une interface implémentée par 3 autres classes. J'ai décidé de mapper ces 3 classes filles et non l'interface même.
Le framework sur lequel je développe m'indique l'erreur suivante :
Association references unmapped class: ElementPage

Il semble que j'ai créé une association vers une interface qui n'est pas mappé et que Hibernate ne gère pas cela. Je ne sais pas comment m'en sortir. Si il y a un génie d'hibernate qui peut me venir en aide, il est le bienvenu.
Merci d'avance pour vos réponses.

Xavier

1 réponse

Salut Xavier,

Je suis, a peu de chose près, dans le même cas que toi.

Je dispose d'un composant, type boite noire, attendant au sein de ses APIs une Interface.
Cette Interface doit être implémentée, au sein d'une application tierce, qui a la charge de la sérialisation (via hibernate). Comme tout l'application est piloté au travers de son mapping, je ne souhaite pas modifier les classes générées, en y ajoutant la déclaration de l'implémentation de l'interfca en quesiton.


As-tu trouvé une solution ?
0