Bonjour tout le monde,

Je travaille actuellement sur les frameworks de persistance et plus particulierement sur un exemple qui met en oeuvre JPOX.

Mon modele objet ressemble grossierement a celui ci :
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
18
19
 Abstract Proposition {
...
HashMap assures;
Type_Proposition type_proposition;
}

Assure {
...
HashMap propositions;
}

 Contrat extends Proposition {
Date date_signature;
}

 Devis extends Proposition {}

 Type_proposition{...}
J'aimerai mapper cet exemple et ajoutant (pour le test) des données en base, j'ai toutefois un probleme qui vient visiblementy du mapping.

Voici le fichier package.jdo, servant au mapping O/R :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE jdo PUBLIC
    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
    "http://java.sun.com/dtd/jdo_2_0.dtd">
<jdo>
    <package name="com.contrat">
         <class name="Assure" table="assure">
             <field name="id_assure" primary-key="true" column="id_assure" value-strategy="autoassign" />
            <field name="nom_assure" column="nom_assure" />
            <field name="prenom_assure" column="prenom_assure" />
            <!--Map(String,Proposition)-->
            <field name="propositions" table="concerne">
                <map key-type="java.lang.String" value-type="com.contrat.Proposition"/>
                <join>
                    <column name="id_assure"/>
                </join>
                <element>
                    <column name="police"/>
                </element>
            </field>        
        </class> 


         <class name="Proposition" table="proposition">
             <!--inheritance, abstract class-->
            <inheritance strategy="new table">
                <discriminator strategy="class-name">
                    <column name="nature_document"/>
                </discriminator>
            </inheritance>
            <field name="police" column="police" primary-key="true" value-strategy="autoassign"/>
            <field name="montant" column="montant" />
            <!-- champ de type Type_Proposition-->
            <field name="type_Proposition" column="type_proposition" />
            <!--champ de type map(String,Assure)-->
            <field name="assures" mapped-by="propositions">
                <map key-type="java.lang.String" value-type="com.contrat.Assure"/>
            </field>
            
        </class>


         <class name="Contrat" persistence-capable-superclass="com.contrat.Proposition">
             <!--superclass inheritance-->
            <inheritance strategy="superclass-table">
                <discriminator value="Contrat" />
            </inheritance>
            <field name="date_signature" column="date_signature" />
        </class>


         <class name="Devis" persistence-capable-superclass="com.contrat.Proposition">
            <!--superclass inheritance-->
            <inheritance strategy="superclass-table">
                <discriminator value="Devis" />
            </inheritance>
        </class>


         <class name="Type_Proposition" table="type_proposition">
             <field name="id_type" column="id_type" primary-key="true" value-strategy="autoassign"/>
            <field name="libelle_type" column="libelle_type" />
        </class>
    </package>
</jdo>
Je parviens, avec ce fichier a enregistrer des Type_Proposition, des assurés sans Proposition, mais lorsque je veux ajouter des propositions, j'obtiens l'erreur suivante (issue du log de JPOX):


4953 [main] INFO JPOX.RDBMS.SCHEMA - Managing Persistence of Class : com.macif.contrat.simplifie.Contrat [Table : `PROPOSITION`, InheritanceStrategy : superclass-table]
4968 [main] DEBUG JPOX.RDBMS.SQL - INSERT INTO `JPOX_TABLES` (`CLASS_NAME`,`TABLE_NAME`,`TYPE`,`OWNER`,`VERSION`) VALUES (?,?,?,?,?)
5062 [main] DEBUG JPOX.RDBMS.SQL - Execution Time = 94 ms
5062 [main] DEBUG JPOX.RDBMS - Table `PROPOSITION` will manage the persistence of the fields for class com.macif.contrat.simplifie.Contrat (inheritance strategy="superclass-table")
5062 [main] DEBUG JPOX.RDBMS - Column "`PROPOSITION`.`DATE_SIGNATURE`" added to internal representation of table.
5062 [main] DEBUG JPOX.RDBMS - Field [com.macif.contrat.simplifie.Contrat.date_signature] -> Column(s) [`PROPOSITION`.`DATE_SIGNATURE`]
5078 [main] DEBUG JPOX.RDBMS.SCHEMA - Column info loaded for Catalog "test", Schema "", 4 tables, time = 0 ms
5078 [main] DEBUG JPOX.RDBMS.SCHEMA - Column info retrieved for table "`PROPOSITION`" : 5 columns found
5093 [main] DEBUG JPOX.RDBMS.SCHEMA - An error occurred while auto-creating schema elements - rolling back
5093 [main] DEBUG JPOX.RDBMS.SQL - DELETE FROM `JPOX_TABLES` WHERE `CLASS_NAME`=?
5109 [main] DEBUG JPOX.RDBMS.SQL - Execution Time = 16 ms
5109 [main] ERROR JPOX.JDO - org.jpox.store.exceptions.MissingColumnException: Required columns missing from table "`PROPOSITION`" : `ASSURES`. Perhaps your MetaData is incorrect, or you havent enabled "org.jpox.autoCreateColumns".
Exception in thread "main" org.jpox.store.exceptions.MissingColumnException: Required columns missing from table "`PROPOSITION`" : `ASSURES`. Perhaps your MetaData is incorrect, or you havent enabled "org.jpox.autoCreateColumns".
at org.jpox.store.rdbms.table.TableImpl.validateColumns(TableImpl.java:259)
at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:2454)
at org.jpox.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2003)
at org.jpox.store.rdbms.RDBMSManager$MgmtTransaction.execute(RDBMSManager.java:1859)
at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:553)
at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:567)
at org.jpox.store.StoreManager.getSubClassesForClass(StoreManager.java:867)
at org.jpox.store.query.UnionIteratorStatement.getQueryStatement(UnionIteratorStatement.java:234)
at org.jpox.store.rdbms.scostore.MapValueSetStore.getIteratorStatement(MapValueSetStore.java:213)
at org.jpox.store.rdbms.scostore.AbstractSetStore.iterator(AbstractSetStore.java:93)
at org.jpox.sco.SCOUtils.populateMapDelegateWithStoreData(SCOUtils.java:794)
at org.jpox.sco.HashMap.loadFromStore(HashMap.java:796)
at org.jpox.sco.HashMap.entrySet(HashMap.java:531)
at org.jpox.sco.HashMap.runReachability(HashMap.java:283)
at org.jpox.state.StateManagerImpl.runReachability(StateManagerImpl.java:3222)
at org.jpox.AbstractPersistenceManager.preCommit(AbstractPersistenceManager.java:3204)
at org.jpox.NonmanagedTransaction.commit(NonmanagedTransaction.java:438)
at com.macif.test.CreateData.main(CreateData.java:52)
Apparemment, il me dit (si je traduis correctement) qu'il aimerait avoir une colonne assures dans ma table proposition. Toutefois, assures etant l'objet d'une relation N-M, il ne doit donc pas chercher assures dans une colonne mais dans la tabler assuré... il doit donc y avoir un probleme avec mon mapping

Si vous voyez une anomalie dans ce mapping, vous pouvez toujours m'en faire part ... comme tout remarque ou suggestions...

Merci d'avance pour vos réponses...