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 :

SaveOrUpdate : modification non prises en comptes


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut SaveOrUpdate : modification non prises en comptes
    Bonjour,

    Aprés un petit test,

    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
     
    Session session = HibernateUtil.openSession("loginAction");
    		Transaction tr = HibernateUtil.beginTransaction(session, "loginAction");
    		tr.begin();
     
    		//Recup les données
    		//PrevBeneficiaire ben = 
    		PrevFicheInval fiche = (PrevFicheInval) session.get(PrevFicheInval.class, new Integer(35));
     
    		//recupère en session les données saisie a la premiere partie
    		//Arret
    		PrevFicheInvalArret prevFicheInvalArret = new PrevFicheInvalArret();
    		prevFicheInvalArret.setArretDateDebut(TraiterDate.stringToDate("01/03/2007"));
    		prevFicheInvalArret.setArretDateFin(TraiterDate.stringToDate("01/04/2007"));
    		prevFicheInvalArret.setArretObjet("TEST");
    		prevFicheInvalArret.setArretEtat("EC");
    //		PrevFicheInval fiche2 = (PrevFicheInval) session.get(PrevFicheInval.class, fiche.getInvalFicheId());
    //		fiche2.getInvalArrets().add(prevFicheInvalArret);
     
    		fiche.setInvalRegimeAmeliore(false);
    		fiche.getInvalArrets().add(prevFicheInvalArret);
     
    		// On sauvegarde
    		session.saveOrUpdate(fiche);
     
    		tr.commit();
    		session.close();
    il se trouve que le nouvel objet que je rajoute à ma collection (prevFicheInvalArret) n'ai pas sauvegarder en BD alors que la modification sur l'objet fiche (passage du boolean a false) elle l'ai.

    Je ne comprend pas pourtant dans le fichier hbm j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <set name="invalArrets" table="prev_fiche_inval_arret" inverse="false" cascade="all" lazy="true" sort="mgpat.workflow.prevoyance.fichessuivi.ArretFicheComparator">
                <key>
                    <column name="arret_fiche_id" />
                </key>
                <one-to-many class="PrevFicheInvalArret" />
     
            </set>
    Donc toute modification devrait etre répercutée.

    PS: Je viens de rajouter un test aprés l'ajout de l'objet à al collection et la taille de mon set est toujours le même ! (resté à un) On dirait que le add na pas fonctionné)

  2. #2
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Bon j'ai trouvé une partie du problème !
    En fait c'était mon comparator appliqué à la collection qui renvoyé que les objets étaient equals tout le temps. j'ai corrigé !

    Par contre, mon objet PrevFicheInvalArret rajouté dans la liste est bien inséré en Base de donnée mais la clé étrangère contenue dans la table prevficheinvalaArret qui permet de faire le lien entre l'arrêt et la fiche n'est pas mise à jour !

    Donc j ai un objet PrevFicheInvalArret en BD relié à aucune fiche inval. Une idée ?


    PS : Mapping complet de la table prev_fiche_inval
    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
     
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 4 avr. 2007 15:05:42 by Hibernate Tools 3.2.0.b9 -->
    <hibernate-mapping package="mgpat.workflow.prevoyance.fichessuivi.hibernate">
        <class name="PrevFicheInval" table="prev_fiche_inval" schema="public">
            <id name="invalFicheId" type="integer">
                <column name="inval_fiche_id" />
                <generator class="sequence">
                	<param name="sequence">prev_fiche_inval_inval_fiche_id_seq</param>
                </generator>
            </id>
            <property name="invalRegimeAmeliore" type="java.lang.Boolean">
                <column name="inval_regimeAmeliore" />
            </property>
            <property name="invalDateAdhesion" type="date">
                <column name="inval_dateAdhesion" length="4" />
            </property>
            <property name="invalObservation" type="string">
                <column name="inval_observation" />
            </property>
            <property name="invalTypeFiche" type="string">
                <column name="inval_type_fiche" length="20" />
            </property>
             <property name="invalNomContrat" type="string">
                <column name="inval_nom_contrat" length="30" />
            </property>
     
            <set name="invalArrets" table="prev_fiche_inval_arret" inverse="true" cascade="all" lazy="true" sort="mgpat.workflow.prevoyance.fichessuivi.ArretFicheComparator">
                <key>
                    <column name="arret_fiche_id" />
                </key>
                <one-to-many class="PrevFicheInvalArret" />
     
            </set>
        </class>
    </hibernate-mapping>

  3. #3
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Hibernate ne fait pas "tout seul" la liaison entre les objets.
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fiche.getInvalArrets().add(prevFicheInvalArret);
    ne suffit pas ...
    Il faut aussi faire qqchose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prevFicheInvalArret.setFiche(fiche);
    en ayant mappé la PrevFicheInvaldans la PrevFicheInvalArret.

    La doc hibernate te conseille d'ailleurs de faire qqchose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fiche.addArret(prevFicheInvalArret);
    et que la méthode addArret se charge d'ajouter la prevFicheInvalArret au set et de setter la ficher de l'arret...

  4. #4
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Normalement ceci est vrai si tu es en mode inverse=true et si j'avais fait un lien dans mon hbm de PrevFicheInvalArret.

    Si c'est une création de touesl objets (fiche et PrevFicheInvalArret) il n'y a aucun problème tous les liens sont fait.
    Si l objet fiche existe deja (update) la ca ne marche plus

  5. #5
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Citation Envoyé par julienOriano
    Normalement ceci est vrai si tu es en mode inverse=true et si j'avais fait un lien dans mon hbm de PrevFicheInvalArret.

    Si c'est une création de touesl objets (fiche et PrevFicheInvalArret) il n'y a aucun problème tous les liens sont fait.
    Si l objet fiche existe deja (update) la ca ne marche plus
    Ben en l'occurence ce n'est pas le comportement dont je me souviens, mais bon ... ca fait un moment.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Bon merci, en tout cas j'ai fait de la bi directionnalité ce qui a mon avis n'est pas obligatoire mais ca marche !

    Y a quelque chose que je ne dois pas voir

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Peux-tu essayer de mettre cascade="save-update" à la place de "all" ?
    Il me semble que j'ai déjà eu ce problème et que seul save-update fonctionnait (peut-être un problème de version d'hibernate)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Effectivement normalement la bi-directionnalité n'est pas censée être obligatoire, ça devrait pouvoir fonctionner correctement sans ...

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/10/2008, 20h59
  2. Modifications non prises en compte
    Par kelidric dans le forum Dev-C++
    Réponses: 1
    Dernier message: 23/02/2007, 16h28
  3. [Continuum] Modification non prises en compte
    Par CharlSka dans le forum Intégration Continue
    Réponses: 8
    Dernier message: 12/02/2007, 10h51
  4. Modification non prise en compte
    Par claireenes dans le forum Général Python
    Réponses: 4
    Dernier message: 31/05/2006, 17h02
  5. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49

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