Bonjour,

Je suis actuellement confronté à un problème de mapping Hibernate auquel je ne trouve pas de solution.

Considérons les classes suivantes :

  • ManagementAct
  • Care, qui dérive de ManagementAct
  • MedicalCare, NurseCare et RescuerCare, qui dérivent toutes trois de Care

J'ai donc là 3 niveaux d'héritages.

Du point de vue base de données, j'ai une table ManagementAct et une table Care, mais pas de table pour les trois dérivations de Care, les différences en terme de données étant relativement minimes. La différenciation se fait donc via un champs discriminant type dans la table Care.

En toute logique, la forme du fichier de mapping serait donc la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<hibernate-mapping>
   <class name="ManagementAct" table="managementAct">
      <id name="id">
        <generator class="assigned"/>
      </id>
      [...]
      <joined-subclass name="Care" table="care">
         <key column="id"/>
         <discriminator column="type" type="string"/>
         [...]
         <subclass name="MedicalCare" discriminator-value="medical">
            [...]
         </subclass>
         [...]
      </joined-subclass>
   </class>
</hibernate-mapping>

L'erreur qui m'est retournée est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
org.xml.sax.SAXParseException: The content of element type "joined-subclass" must match "(meta*,subselect?,synchronize*,comment?,tuplizer*,key,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,joined-subclass*,loader?,sql-insert?,sql-update?,sql-delete?,resultset*,(query|sql-query)*)".
Celle-ci laisse donc à penser que la dtd des fichiers de mappings d'Hibernate n'admet ni balise <subclass> ni <discriminator> dans un élément <join-subclass>.

Existe-t-il une autre solution, sans avoir à modifier mes modèles de classes et de données ?

Merci d'avance pour votre aide.