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

Hibernate Java Discussion :

Gestion des clés étrangères


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut Gestion des clés étrangères
    Bonjour à tous,
    Je suis nouveau dans l'univers de Struts2 et Hibernate, et j'ai une application Web à réaliser avec ce framework.
    J'ai commencé a bien apprivoiser la bête, mais je rencontre un soucis pour la gestion de mes formulaires.

    J'ai une table "Client" et une table "Coordonnnees". Ma table Client contient un champ coordonnees_id, pointant vers la clé "id" de ma table Coordonnees.
    J'ai actuellement un formulaire pour créer un nouveau client, avec également les champs relatifs aux coordonnées. J'aimerais qu'en validant ce formulaire, mes 2 tables soient remplies et que mon champ "coordonnees_id" de ma table Client contienne le nouvel id de ma table "coordonnees" (que je viens juste d'insérer).
    J'ai cru comprendre qu'Hibernate pouvait gérer ceci par un "mapping" des classes/tables pour qu'a chaque insert/update/delete, l'action se répercute sur les 2 classes/tables de manière automatique, mais j'avoue ne pas trop m'y connaitre, et j'ai grand besoin d'aide s'il vous plait.

    Fichier add.jsp (formulaire d'ajout d'un client, et de ses coordonnees)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <s:form method="post" action="create">
        <s:textfield cssClass="" label="Nom" name="client.nom" />
        <s:textfield cssClass="" label="Prénom" name="client.prenom" />
        ....
        <s:textfield cssClass="" label="Email" name="coordonnees.email" />
        <s:textfield cssClass="" label="Adresse" name="coordonnees.adresse" />
        <s:submit value="Insert" />
    </s:form>
    Fichier Client.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <many-to-one class="model.Coordonnees" fetch="select" name="coordonnees">
        <column name="coordoonnees_id"/>
    </many-to-one>
    Fichier Coordonnees.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <set inverse="true" name="clients">
          <key>
            <column name="coordoonnees_id"/>
          </key>
          <one-to-many class="fr.model.Client"/>
    </set>
    Merci à tous

  2. #2
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut Comment bien mapper.
    Je viens de trouver un très bon exemple ici d'intégration d'Hibernate avec Struts.

    Le principe est récupérer l'objet SessionFactory dans l'Action (ou sa méthode, vu que tu es en Struts2), de faire un BeanUtils.copyProperties(client, clientForm) entre ton bean hibernate et le form que tu reçois de ta JSP et de faire un save/update/delete sur ton objet client !

    Je te conseille le reste des tuto hibernate ici.

    Oups, j'avais pas vu la gestion des clées étrangères, mais c'est expliqué là par tchize_

    Et un tutoriel sur les différents mapping existants avec hibernate.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Bonjour Drakiss
    Citation Envoyé par Drakiss Voir le message
    Oups, j'avais pas vu la gestion des clées étrangères
    Oui effectivement, j'ai déjà intégré hibernate, j'arrive a l'utiliser, mais c'est cet aspect que je ne maitrise pas encore

    Je te remercie pour tes autres liens, je regarde ca dessuite et je te tiens au courant

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Le tuto de tchize m'a aidé en effet, en ce qui concerne mon insert, ca marche nikel

    La ca se complique, c'est lors d'un update, j'ai repris le meme principe, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    client.setCoordonnees(coordonnees);
    session.update(client);
    Mais ici, ca me rajoute une ligne dans ma table coordonnees, au lieu de modifier l'ancienne :/
    Et si j'enlève le client.setCoordonnees(coordonnees); , ma coordonnées n'est pas modifiée, et mon champ "coordonnees_id" de ma table client passe a Null ...

    Je précise que dans mon fichier Client.hbm.xml (classe qui contient la clé étrangère vers Coordonnées) j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <many-to-one class="fr.model.Coordonnees" cascade="all" fetch="select" name="coordonnees">
          <column name="coordonnees_id"/>
    </many-to-one>

  5. #5
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Bonjour, ma première question est :
    Est-ce que tu fait load ou un get du client ?
    La différence est, est-ce que tu va chercher le client en base ou dans la session ?

    Deuxièmement pour moi remplace le cascade="all" par cascade="all-delete-orphan" ou cascade="save-update".

    Test le fetch="join", pour charger les objets par jointure et non par select.

    Je rajouterai un petit insert="false" update="false" dans le coordonnés.hbm.xml pour empêcher que les coordonnée ne s'insère ou ne s'update, et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <column name="coordonnees_id" not-null="true"/ >
    dans le Client.hbm.xml, pour éviter de rentrer un client sans coordonnées.

    Ça devrait rouler...
    ou pas puisque la dernière question est : est-ce que tes identifiants sont générés ou assignés ?
    En gros, est-ce que tu laisse la base donner la clée ou tu la produit par toi même ?
    Si tu la produit "à la main" sache qu'il va te falloir un numéro de version sur l'enfant (coordonnées) et donc refaire ta base car Hibernate est incapable de faire une comparaison entre un nouvel objet instancié et un objet loadé dans la session...

    Désolé pour le pavé, je réfléchissait en même temps que j'écrivai, mais je te laisse le cheminement car j'ai évoqué des points important il me semble

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Bonjour Drakiss,
    Citation Envoyé par Drakiss Voir le message
    Est-ce que tu fait load ou un get du client ?
    Pour remplir mon formulaire (lors de l'édition) je fais un "get" (j'ai testé avec un load, ca me fait pareil)

    Citation Envoyé par Drakiss Voir le message
    Deuxièmement pour moi remplace le cascade="all" par cascade="all-delete-orphan" ou cascade="save-update".
    Je veux bien, mais quelle est la différence entre "all" et "all-delete-orphan" stp ?

    Citation Envoyé par Drakiss Voir le message
    Test le fetch="join", pour charger les objets par jointure et non par select.
    La encore, il y a t-il une différence notable ? (c'est une vraie question, je ne maîtrise pas encore le sujet )

    Citation Envoyé par Drakiss Voir le message
    Je rajouterai un petit insert="false" update="false" dans le coordonnés.hbm.xml pour empêcher que les coordonnée ne s'insère ou ne s'update, et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <column name="coordonnees_id" not-null="true"/ >
    dans le Client.hbm.xml, pour éviter de rentrer un client sans coordonnées.
    Je laisse la possibilité de rentrer un client sans coordonnees, c'est tout a fait possible dans mon projet (merci quand même)

    Citation Envoyé par Drakiss Voir le message
    Ça devrait rouler...
    ou pas puisque la dernière question est : est-ce que tes identifiants sont générés ou assignés ?
    Mes ID sont générés

    Actuellement, ca marche très bien pour moi, mais j'ai du mettre une "rustine" : dans mon formulaire d'édition, je passe l'ID de mes coordonnees, en hidden ... Ce n'est pas très propre, j'aimerai pouvoir faire autrement

    J'ai testé tes méthodes, et si je vire ce champ hidden, je récupère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client: Client{id=79, coordonnees=null, nom=unNom, prenom=unPrenom}
    Coordonnees : Coordonnees{id=0, fixe=0000000, mobile=, adresse1=, adresse2=, email=, cp=, ville=}
    Je récupère un ID coordonnees = 0 alors que je devrais récupérer par exemple id=43

  7. #7
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    La clause cascade="all-delete-orphan" permet d'effacer les identifications correspondant à une personne lors de la suppression de la personne.

    La meilleur illustration pour moi se situe ici au chapitre 9.9. Cycles de vie et graphes d'objets.

    Pour la différence des fetch va par là .
    Sachant que ce n'est qu'une optimisation de ton accès à la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client: Client{id=79, coordonnees=null, nom=unNom, prenom=unPrenom}
    Coordonnees : Coordonnees{id=0, fixe=0000000, mobile=, adresse1=, adresse2=, email=, cp=, ville=}
    C'est bizarre que tu récupère null dans les coordonnées du client, je me demande comment tu load les coordonnées, et si ta classe client contient une variable coordonnée ou l'inverse, et si tu as créé des méthodes addCoordonnee, getCoordonnéé, pour bien loader les coordonnées de tes clients ?

    Suis l'exemple ici , il est tout à fait clair, et dis-moi comment cela se comporte, tu ne devrais pas avoir à passer par des hidden dans le form...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Pour charger mon formulaire d'édition :
    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
    public Client selectById(int id) {
     
            session = MyHibernateUtil.currentSession();
            tx = session.beginTransaction();
     
            Client client = null;
            try {
                client = (Client) session.get(Client.class, new Integer(id));
            } catch (Exception e) {
                log.error(e);
            } finally {
                tx.commit();
            }
            return client;
        }
    Dans ma classe Client.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
        @JoinColumn(name="coordonnees_id")
        public Coordonnees getCoordonnees() {
            return this.coordonnees;
        }
     
        public void setCoordonnees(Coordonnees coordonnees) {
            this.coordonnees = coordonnees;
        }
    Dans mon Client.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <many-to-one class="fr.model.Coordonnees" cascade="all" fetch="join" name="coordonnees">
        <column name="coordonnees_id"/>
    </many-to-one>

  9. #9
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Bonjour pour moi effectivement tu n'initialise pas la collection de coordonnée.
    Tu load le client, mais pas ses coordonnée, car le FetchType.LAZY correspond au fait que tu n'appelle la collection que si tu en as besoin, et il te faudrait un code HQL en plus lors de l'appel du client pour loader aussi ses coordonnée...

    En gros il te faut faire un truc du genre :

    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
    public Client selectClientAndCoordById(int id) {
     
            session = MyHibernateUtil.currentSession();
            tx = session.beginTransaction();
     
            Client client = null;
            try {
                client = (Client) session.get(Client.class, new Integer(id));
                client.getCoordonnes(); // Pour loader aussi les coordonnées du client
            } catch (Exception e) {
                log.error(e);
            } finally {
                tx.commit();
            }
            return client;
        }
    Désolé, c'est du code un peu approximatif, je n'ai pas les moyens de tester...
    Mais si tu veux des précisions : c'est par ici.
    Et une explication qui aide vraiment sur le LAZY

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Citation Envoyé par Drakiss Voir le message
    Bonjour pour moi effectivement tu n'initialise pas la collection de coordonnée.
    Tu load le client, mais pas ses coordonnée, car le FetchType.LAZY correspond au fait que tu n'appelle la collection que si tu en as besoin, et il te faudrait un code HQL en plus lors de l'appel du client pour loader aussi ses coordonnée...
    Le plus bizarre dans tout ça, c'est que mes coordonnées sont bien chargées...
    Dans mon formulaire, j'ai par exemple ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:textfield label="Email" name="coordonnees.email" />
    Et je viens bien récupérer ma coordonnée associée

    Et encore plus troublant, j'ai fais le test en mettant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:textfield label="Id" name="coordonnees.id" />
    Mon id s'affiche bien dedans !
    Aurais-tu une explication par rapport à ceci ?
    Merci d'avance

  11. #11
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Hum, apparemment la copie des propriétés du bean nested (coordonnee) se fait à la main dans Struts2/Hibernate.

    Il te faut une structure (POJO) qui récupère les valeurs de struts2 et les envoi (celle voulues) vers la bdd en comparant les clés, pas moyens de passer outre...

    J' ai trouvé la réponse ici et je ne pense pas que cela ai changé depuis mars...

    Comme quoi on pense avancer plus vite avec hibernate, mais...

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Je vais regarder ca et je te tiens au courant, merci.

    J'ai aussi remarqué que dans mon formulaire d'édition, si un des champs n'est pas appelé, sa valeur ne sera non seulement pas remplie, mais vidée !
    Je m'explique :
    Si dans ma table j'ai un enregistrement avec 3 champs :
    • Id : 3
    • Nom : John
    • Prénom : Bobby


    Et si j'ai un formulaire d'édition comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <s:form method="post" action="update">
        <s:textfield label="Nom" name="client.nom" />
        <s:submit value="Modifier" />
    </s:form>
    Si je valide et que je vérifie mes données envoyées, j'aurais :
    1. client_id = null;
    2. client_nom = "John";
    3. client_prenom = null ;

    N'ayant pas d'id, mon client ne sera pas "updaté", et si je force en passant l'ID en hidden (ce que je ne veux pas faire), mon client va bien etre mis à jour, mais le champ "prénom" va passer de "Bobby" à "Null" (car je ne l'aurai pas chargé dans le formulaire ...)
    Y a t'il un moyen de charger automatiquement TOUS les champs lors d'une modification par exemple ? Au lieu de charger uniquement les champs qui sont "utilisés" dans le formulaire

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Pas d'autres réponses à me proposer svp ?

  14. #14
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Non je vois pas, désolé, je pense même que c'est ainsi que Hibernate fonctionne.
    A part passer en hiden, ce qui est bien moche effectivement, ou vérifier en amont les propriétés inchangée, et les copier.

    Je me demande quand même pourquoi tu ne fait un formulaire que d'un seul champ, ce ne serait pas plus facile de ré-afficher tout le contenu du bean et de laisser l'utilisateur changer ou pas l'un des champs (éventuellement mettre le champ en read-only si tu ne veux pas qu'il le change), ça permettrait à l'utilisateur de vérifier qu'il est bien en train de modifier le bon client et toi de récupérer les valeurs inchangées ?

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Citation Envoyé par Drakiss Voir le message
    Je me demande quand même pourquoi tu ne fait un formulaire que d'un seul champ
    C'était juste pour le topic la, mon formulaire est un poil plus gros

  16. #16
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Citation Envoyé par VinceCBA Voir le message
    C'était juste pour le topic la, mon formulaire est un poil plus gros
    D'accord, donc tu réaffiche bien tous les champs, les récupère dans le formulaire, et tu as toujours le même problème, à savoir, il ne modifie en base que les champs qui ont été modifié dans le formulaire ?

    Si c'est ça, c'est effectivement étonnant...

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Pas forcément les champs modifiés (au sens de changer leur valeur), mais seulement les champs "appelés" si je peux dire.
    Si j'ai un champ "nom" et un champ "prenom" dans ma base et que je n'appelle que <s:textfield name="client.nom"> (en textfield ou hidden par exemple), ma valeur de "prénom" passera a null dans ma base lors de l'édition, car je ne l'ai pas "appelé" dans mon form

  18. #18
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Je pense que c'est effectivement la manière dont fonctionne Hibernate, voit ici au chapitre 22.4..

    Je suis pas expert, mais je trouve ça normal que tu efface tes champs, imagine :

    Tu as un client qui a une coordonnée en base.
    Tu load le bean client et la coordonnée se rattachant.
    A ce moment, le client et la coordonnée de la session sont différent de ceux en base, même si ils contiennent les mêmes valeurs.

    Tu modifie ensuite certains champs de la coordonnée mais ne récupère pas le reste, à ce moment tu as deux objets coordonnée, dont l'un contient les valeurs initiales, et l'autre QUE celles modifiées.

    Tu cherche ensuite à rattacher la nouvelle coordonnée (qui ne contient pas tout) au client, c'est alors qu'HIbernate s'aperçoit que les deux coordonnée ont le même id, et là, ça affecte la nouvelle coordonée au client en effaçant l'ancienne en base, évidement.

    La seule solution reste de ré-afficher toute l'ancienne coordonnée dans le form pour que le client ne modifie que ce qu'il veut que tu récupère un form avec toutes les bons champs.
    Ou alors de copier les champs de ta coordonnée initiale dans la nouvelle coordonnée, en omettant de copier les champs que le client à modifier (solution bizarre mais ça marche).

    Tu vois ce que je veux dire ?

  19. #19
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Je vois l'idée ouais ...
    Meme si y'a une certaine logique, je trouve pas ca vraiment pratique ...
    Je vais procéder en passant le peu de champs qu'il me faut en hidden, pas d'autres solutions visiblement.

    Merci beaucoup pour le temps que tu as passé a me répondre, et bonne continuation

  20. #20
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Citation Envoyé par VinceCBA Voir le message
    pas d'autres solutions visiblement.
    Merci beaucoup pour le temps que tu as passé a me répondre, et bonne continuation
    Je n'en voit pas d'autres personnellement, et de rien.
    Bonne continuation à toi aussi et à très bientôt sur le site !

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

Discussions similaires

  1. Gestion des clés primaires et étrangères
    Par jonrod dans le forum Designer
    Réponses: 5
    Dernier message: 10/04/2012, 10h38
  2. SQLite Release 3.6.19 : Gestion des clés étrangères
    Par Emmanuel Lecoester dans le forum SQLite
    Réponses: 22
    Dernier message: 19/11/2009, 15h06
  3. [MySQL] Insertions et gestion des clés étrangères
    Par b_e_n_n dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/06/2008, 16h14
  4. Réponses: 5
    Dernier message: 05/10/2006, 19h07
  5. Gestion des clés étrangères
    Par Gonelle dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 06/07/2006, 10h48

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