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 :
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.
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{...}
Voici le fichier package.jdo, servant au mapping O/R :
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):
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>
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
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)
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...
Partager