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 :

OneToMany et une boucle qui crée les objets..


Sujet :

Hibernate Java

  1. #1
    Invité
    Invité(e)
    Par défaut OneToMany et une boucle qui crée les objets..
    Bonjour,

    voila je m'explique j'ai deux objet A et B qui sont en relation One To Many dans mon main je crée un objet A et j'aimerai utilisé une boucle pour crée les objet B et les ajoutés à A et répété jusqu'à la fin de la boucle pour finalement insérer le tous.

    je l'ai fais mais l'objet a gardé le même non et quand je le teste sur plusieurs ligne ça marche plus pkoi ?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Peux tu nous faire voir ton code et bien reexpliquer ton souci? On n'est pas des "Merlin l'enchanteur" non plus sur ce site

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui vous avez raison Donc voila je parcoure les lignes d'un fichier Excel que j’insère dans la Base et j'ai plusieurs information qui on la relation One to Many j'ai commence par les deux premier que j'ai nommé classA et classB donc classA peux contenir plusieurs classB.
    Voici le Code :
    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
     
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		AnnotationConfiguration config = new AnnotationConfiguration();
    		config.addAnnotatedClass(ClasseA.class);
    		config.addAnnotatedClass(ClasseB.class);
    		config.configure("hibernate.cfg.xml");
     
    		new SchemaExport(config).create(true, true);
     
    		SessionFactory factory = config.buildSessionFactory();
    		Session sesion = factory.getCurrentSession();
    		sesion.beginTransaction();
    		System.out.println(System.getProperty("user.dir"));
    		File file = new File("xlsTest/test.xls");
    		UtilitaireXLS xls=new UtilitaireXLS();
    		try{
    			JTable t = xls.CreerJTableAvecExcel(file);
    			int Nrow = xls.getNrow();
    			int St = xls.getSt();
    			HashMap<String, String>     dictionnaire = new HashMap<String, String>();
    			ClasseA a = new ClasseA ();
                  a.setNomClasseA ("omar");
    		      a.setAdresse("a deu pas");
    			ClasseB b = new ClasseB();
    			for (int i=1; i<Nrow; i++){//parcourir le fichier exel
    				String h = ""+t.getValueAt(i, 2);
    				if((!h.equals("null")) && (!h.equals(""))){
    					for(int j=0; j<St-1; j++){
    						String a = ""+t.getValueAt(0, j);
    						String b =""+ t.getValueAt(i, j);
    						dictionnaire.put(a,b);
    					}
    				if(b.getNom() != dictionnaire.get("Nom").toString()){//Ajouté le groupe b au proprietair a si il est diferent du précedent
    						b = new ClasseB();
    						b.setNom(dictionnaire.get("Nom").toString());
                            b.setClasseA (a);
                            a.getClasseBs().add(b);
    					}
    				}
    			}
    			sesion.save(a);
    			sesion.beginTransaction().commit();
    		}catch (Exception e) {
    			// TODO: handle exception
    			System.out.println("Exception:"+e.getMessage());
    			e.printStackTrace();
    		}
    	}
    Il marche pas j'arrive pas a insérer les données dans la base
    NB:
    J'ai mis dans classeB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="ID_ClasseA")
    private ClasseA aclasse;
    et dans ClasseA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @OneToMany(mappedBy="aclasse", targetEntity=ClasseB.class, 
    			cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    private Collection<ClasseB> classebs =  new ArrayList<ClasseB>();
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est bon j'ai réussit a le faire marcher
    Par contre j'aimerai bien votre avis sur le code

    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re Bonjour,
    J'ai un autre problème
    j'arrive a enregistrer mes objet par contre si je refais l'action une deuxième fois il m'enregistre les objet une deuxième fois dans la base alors que j'ai utilisé saveOrUpdate normalement je doit comparer si le nom de la classA existe est-ce que je doit mettre nom dans la classA comme PK où bien il y a une autre méthode

    Merci

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par newbe-deve Voir le message
    Re Bonjour,
    J'ai un autre problème
    j'arrive a enregistrer mes objet par contre si je refais l'action une deuxième fois il m'enregistre les objet une deuxième fois dans la base alors que j'ai utilisé saveOrUpdate normalement je doit comparer si le nom de la classA existe est-ce que je doit mettre nom dans la classA comme PK où bien il y a une autre méthode

    Merci
    C'est normal ce comportement. Pour Hibernate à chaque fois c'est un nouvel objet, pour qu'il detecte que c'est un objet deja existant en base, il faut que tu rattaches cet objet à ton contexte de persistence, et pour l'attacher à ton contexte il faut que tu l'extraies de la base soit par un findById, soit par une requete HQL, à ce moment hibernate met sa reference dans son contexte de persistence comme étant un objet managé. A ce moment là si tu fais un saveOrUpdate sur l'objet managé tu verras bien qu'il ne réinsère pas une deuxieme fois mais tente de faire une mise à jour. J'espère m'être fait comprendre.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tout a Fait DevServlet

    Merci ,

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2014, 10h39
  2. [XL-2010] une boucle qui ne travail que sur les lignes visibles
    Par beta007 dans le forum Excel
    Réponses: 3
    Dernier message: 11/03/2014, 16h38
  3. Réponses: 4
    Dernier message: 13/02/2012, 13h11
  4. Réponses: 11
    Dernier message: 05/02/2008, 13h10
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h04

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