Problème mapping dans héritage
Bonjour ;
je veux mappez cette diagramme avec Hibernate 3:
http://nsa32.casimages.com/img/2012/...0525744537.png
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:
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:
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:
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:
1 2 3 4 5
|
InvoiceSale invoice = new InvoiceSale();
//....
Session session = service.getTheSession();
session .save(invoice ); |
et ce qui affiche la console:
Code:
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.