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 :

Insertion avec un Set


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur software (débutant)
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur software (débutant)

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut Insertion avec un Set
    Bonjour à tous.

    Je suis nouveau à Hibernate.

    J'ai deux Tables très basiques et, l'une référence l'autre par clé étrangère.

    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
     
     
    <class name="Tab" table="tab" schema="public">
            <id name="id" type="int">
                <column name="id" />
                <generator class="assigned" />
            </id>
            <many-to-one name="test" class="Test">
                <column name="test" />
            </many-to-one>
    </class>
     
    <class name="Test" table="test" schema="public">
            <id name="id" type="int">
                <column name="id" />
                <generator class="assigned" />
            </id>
            <property name="text" type="string">
                <column name="text" />
            </property>
            <set name="tabs" inverse="true">
                <key>
                    <column name="test" />
                </key>
                <one-to-many class="Tab" />
            </set>
    </class>
    Je pense qu'il n'y a pas de problème de mapping ni dans mes classe persistantes qui sont les suivantes:

    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
     
    public class Tab  implements java.io.Serializable
     private int id;
     private Test test;
     
       public Tab() {
       }
     
    //code complet avec les getter et les constructeurs
     
       public Test getTest() {
           return this.test;
       }
     
       public void setTest(Test test) {
           this.test = 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
     
    public class Test  implements java.io.Serializable {
     
     
        private int id;
        private String text;
        private Set tabs = new HashSet(0);
     
       public Test() {
       }
     
      .....
     
       public Set getTabs() {
           return this.tabs;
       }
     
       public void setTabs(Set tabs) {
           this.tabs = tabs;
       }
    ce bout de code que j'exécute dans un Main m'insère très une entrée dans Test mais pas les objets associés à savoir les Tab. (et inversement ça marche sans problème).

    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
     
    	                session = HibernateUtil.currentSession();
    			Transaction tx = session.beginTransaction();
     
    			Tab tab = new Tab(11);
    			Set tabs = new HashSet<Tab>();
    			tabs.add(tab);
     
    			//ceci ne marche pas
    			Test test = (Test)session.load(Test.class, 30); 
    			test.setTabs(tabs);
     
    			//et cela ne marche pas non plus.
    			Test test2 = (Test)session.load(Test.class, 30);
    			test2.getTabs().add(tab);
    			session.saveOrUpdate(test2);
     
    			session.flush();
    			tx.commit();
    			HibernateUtil.closeSession();
    Il n'y pas d'erreurs d'exécution.
    Merci de m'aider à comprendre d'ou vient le problème.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par Slim_X Voir le message
    Il n'y pas d'erreurs d'exécution.
    Merci de m'aider à comprendre d'ou vient le problème.
    Vous ne dîtes jamais au Tab à quel Test il appartient.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur software (débutant)
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur software (débutant)

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Vous ne dîtes jamais au Tab à quel Test il appartient.
    Vous voulez dire que dans ma classe il manque l'attribut de l'ID de TEST c'est bien cela?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par Slim_X Voir le message
    Vous voulez dire que dans ma classe il manque l'attribut de l'ID de TEST c'est bien cela?
    Non, vous avez déjà cet attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Test test;
    mais vous n'appelez jamais "setTest" donc le "Tab" aura ce champ à NULL dans la DB => le "Test" n'a aucun "Tab" qui pointe sur lui et donc le Set reste vide..

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu dois aussi faire un save sur chaque Tab, ou alors utiliser les cascades dans ton mapping.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur software (débutant)
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur software (débutant)

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut
    Merci encore une fois.

    Une dernière question.

    J'utilise GWT + Hibernate. J'ai essayé à maintes reprises d'intégrer les bibliothèques tierces de gilead (Hibernate4gwt) mais ça n'a pas marché. Du coup je vais utiliser l'approche DTO comme mentionné dans google.code. mais ces derniers sont très lents (et pénibles) dans le développement.

    Pourrais je pour me simplifier la vie n'utiliser que des associations unidirectionnelles dans mes entités pour éviter les 'Set' et les 'List' dans les classes mères (sachant que je n'ai aucune relation many-to-many que des 1-n). C'est faisable detravailler avec Hibernate un peu à la façon de SQL , les classes filles retiennent la référence de la mère mais pas l'inverse?

    Merci d'avance.

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. probleme avec la méthode insert de std::set
    Par elekis dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/04/2007, 18h01
  3. Recherche "étoilée" avec std::set
    Par guejo dans le forum MFC
    Réponses: 2
    Dernier message: 06/05/2004, 13h28
  4. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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