IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

[Mapping O/R][JPOX] Mapping relation N-M et maps ...


Sujet :

Persistance des données Java

  1. #1
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut [Mapping O/R][JPOX] Mapping relation N-M et maps ...
    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...
    See you, space cowboy... and if you're satisfied, click on

  2. #2
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Bon, apres étude du probleme et consultation de moult documentations et demandes sur le forum de JPOX, on m'a précisé que les maps n'étaient pas gérées lors des relations N-M ... et que je devais m'appuyer sur des Set ... donc résultat ... je vais utiliser les HashSet et tout ce que j'ai fais fonctionne correctement, il suffit juste ded remplace les tag <map> par des tag <collection> dont element-type est égal aux value-type existant et le tour est joué ... reste a régler mes autres problemes de mapping !
    See you, space cowboy... and if you're satisfied, click on

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDO] Annotations pour intégrer une relation 1-N par map dans sa join table
    Par Blustuff dans le forum Persistance des données
    Réponses: 0
    Dernier message: 31/01/2009, 13h33
  2. [NHibernate.Mapping.Attributes] Relation ManyToMany
    Par anthyme dans le forum NHibernate
    Réponses: 2
    Dernier message: 12/07/2007, 20h34
  3. [Hibernate]Mapping relation one-to-one
    Par K-Kaï dans le forum Hibernate
    Réponses: 9
    Dernier message: 23/06/2006, 16h02
  4. [Mapping]relation plusieurs-vers-plusieurs
    Par berret dans le forum Hibernate
    Réponses: 2
    Dernier message: 21/01/2005, 18h44
  5. [Mapping] Structure d'une relation
    Par k4eve dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo