Bonjour ;
je veux mappez cette diagramme avec Hibernate 3:

pour cela j'ai utilisé joined-subclass pour le premier niveau et subclass pour le second niveau et j'ai utilisé une fichier de mappage pour chaque classe ,puisque Hibernate ne supporte pas de mélanger des mappings <subclass> et <joined-subclass> :
Document.hbm.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<hibernate-mapping>
   <class name="src.Document" table="DOCUMENT">
      <composite-id class="src.IdDocument" name="identifiant">
          <key-property column="NUM_DOC" name="numero" />
          <key-property column="TYPE_DOC" name="type" />
      </composite-id>
 
      <discriminator column="TYPE" type="string" />
                 ...........
                 ...........
   </class>
</hibernate-mapping>
DocumentSale.hbm.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<hibernate-mapping>   
      <joined-subclass name="src.DocumentSale" extends="src.Document" table="DOCUMENT_SALE">
                      <key property-ref="identifiant">
            <column name="NUM_DOC"></column>
            <column name="TYPE_DOC"></column>
         </key>
      <property name="ref" column="REF"  type="java.lang.String"/>         
                 ...........
                 ...........
   </class>
</hibernate-mapping>
InvoiceSale.hbm.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<hibernate-mapping>
   <subclass name="src.InvoiceSale" extends="src.DocumentSale"              
      discriminator-value="INVOICE_SALE">      
   </subclass>
</hibernate-mapping>
et le reste ORDER_SALE ,INVOICE_PURCHASE,ORDRE_PURCHASE sont mappées comme InvoiceSale.

maintenant si je veux enregister une Facture ( InvoiceSale) j'ai fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
   InvoiceSale invoice = new InvoiceSale();
        //....
   Session session = service.getTheSession();
   session .save(invoice );
et ce qui affiche la console:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
   Hibernate: insert into DOCUMENT (NUM_DOC, TYPE_DOC ,TYPE,HT, TTC) values (?, ?, ?, ?, ?)
   Hibernate: insert into DOCUMENT_SALE (NUM_DOC, TYPE_DOC ,REF) values (?, ?, ?)
   Hibernate: insert into DOCUMENT_SALE (NUM_DOC, TYPE_DOC ,) values (?, ?)
    ......
   SEVERE: ORA-00001: violation  single  constraint
   ....
il insérer deux fois dans la table DOCUMENT_SALE , je ne comprends pas d'où vient le problème.
alors ma question:
- Est ce que le mappage que j'ai fait pour ce diagramme de classe est correcte?
- y'a t'il un autre moyen pour l'améliorer?
- et pourquoi hibernate enregistre deux fois la facture ce qui posse la violation de constrainte clé primaire?

et merci d'avance pour avoir m'aider.