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 :

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 : pb dans insetion de donnée


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 : pb dans insetion de donnée
    Tout d'abord je m'excuse si ce n'est pas au bon endroit où je dois poster mon message de détresse mais il me semble que c'est ici.
    Ce cela n'est pas le cas, je m'en excuse.

    Je développe une application sur la gestion des horaires, et avant que l'on insère une semaine pour une unité donnée, je souhaite vérifier si elle existe ou non pour celle-ci.

    J'ai donc fais un méthode validation qui contient une méthode vérification pour savoir si la semaine existe. Cette méthode accepte 2 paramètres : idUnité et le numéro de la semaine :
    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
     
    public void validate() { 
     
    	boolean exists = false;
    	if (this.uniteSelected != null && this.numeroSemaine != null){
    		System.out.println("this.uniteSelected "+this.uniteSelected);
    		System.out.println("this.numeroSemaine "+this.numeroSemaine);
     
     
    		SemaineDTO semaineDtoVerif = this.semaineService.getSemainesForIdUniteAndNumSem(Integer.parseInt(this.uniteSelected),Integer.parseInt(this.numeroSemaine));
    		if(semaineDtoVerif != null){
    			System.out.println("2222222222  "+semaineDtoVerif);
    		}
    		System.out.println("semaineDtoVerif "+semaineDtoVerif);
    		System.out.println("semaineDtoVerif Type : "+semaineDtoVerif.getType());
     
    		if((semaineDtoVerif != null) && !"yes".equals(this.modeUpdate) && (semaineDtoVerif.getType().equals(this.getTypeSemaine()))){
    			System.out.println("Je suis ici");
    			addFieldError("error", "La semaine numéro "+this.numeroSemaine+" existe déjà en Base de données pour l'unité selectionnée. Si vous souhaitez la modifier, veuillez passez en mode modification.");
    			exists = true;
    		}
     
    		System.out.println("typeSemaine : "+this.getTypeSemaine());
     
    		if (!exists){
    			List<SemaineDTO> semaineDtos = this.semaineService.getListSemaineForIdUnite(Integer.parseInt(this.uniteSelected));
    			for(SemaineDTO semaineDto : semaineDtos){
    				int numSemaineEnBase = semaineDto.getNumeroSemaine();
    				Date dateDebut =  semaineDto.getDateDebutSem();
    				System.out.println("*pp*dateDebut*pp* :"+dateDebut);
    				Date dateFin = semaineDto.getDateFinSem();
    				System.out.println("*pp*dateFin*pp* :"+dateFin);
    				String typeSemaine = semaineDto.getType();
     
    				System.out.println("***modeUpdate*** : "+this.modeUpdate);
    				if(this.dateDebut != null ){
     
    					if (dateDebut != null && dateFin != null && !"yes".equals(this.modeUpdate)){
     
    						if((dateDebut.compareTo(this.dateDebut)==0) &&(dateFin.compareTo(this.dateFin)==0) && (typeSemaine.compareTo(this.typeSemaine) == 0)){
     
    							System.out.println("dateDebut : "+dateDebut);
    							System.out.println("La semaine "+numSemaineEnBase+" existe déjà en Base de données pour l'unité selectionnée. Si vous souhaitez la modifier, veuillez passez en mode modification.");
    							addFieldError("error", "La semaine "+numSemaineEnBase+" existe déjà en Base de données pour l'unité selectionnée. Si vous souhaitez la modifier, veuillez passez en mode modification.");
    							exists = true;
    							break;
    						}else{
    							System.out.println("toto");
    						}
    					}
     
    				}else{
    						System.out.println("tata");
    				}
    			}
    		}
     
    	}
    }
    La méthode getSemainesForIdUniteAndNumSem(Integer idUnite, Integer numeroSemaine) est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public SemaineDTO getSemainesForIdUniteAndNumSem(Integer idUnite, Integer numeroSemaine){
     
    		System.out.println("JE SUIS DANS getSemainesForIdUniteAndNumSem");
    		Semaine semaineBeans =  this.semaineDao.getSemaineByIdUniteAndNumeSemaine(idUnite, numeroSemaine);
     
    		SemaineDTO semaineDto = new SemaineDTO(semaineBeans);
     
    		return semaineDto;
     
    	}
    La méthode getSemaineByIdUniteAndNumeSemaine(Integer idUnite, Integer numeroSemaine) est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Semaine getSemaineByIdUniteAndNumeSemaine(Integer idUnite, Integer numeSemaine){
    	Semaine semaine = null;
    	String queryString =
    			"select semaine " +
    					"from Semaine as semaine " +
    					"where semaine.idUnite =? and semaine.numeroSemaine =?";
     
    	Integer[] params = {idUnite, numeSemaine};
    	semaine = (Semaine) this.getHibernateTemplate().find(queryString, params).get(0);
     
    	return semaine;
    }

    Je n'ai pas d'erreur hibernate.

    Donc comment puis je faire pour insérer la semaine si elle n'existe pas en BDD ?

    Merci de votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 562
    Points
    562
    Par défaut
    Bonsoir,
    donc tu voudrais bien avoir une ArrayIndexOutOfBoundException, et tu n'as rien...

    Ca ne devrait pas être en HQL la query du find ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String queryString ="from Semaine s where s.idUnite =? and s.numeroSemaine =?";
    tu as mis l'intégralité de ton code ? aucune gestion d'exception nulle part (try/catch ou throws )

  3. #3
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    kox2ee > Merci pour ta réponse.

    Oui j'ai effectivement mis l'intégralité de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Semaine getSemaineByIdUniteAndNumeSemaine(Integer idUnite, Integer numeSemaine){
    		Semaine semaine = null;
    		String queryString =
    				"select semaine " +
    						"from Semaine as semaine " +
    						"where semaine.idUnite =? and semaine.numeroSemaine =?";
     
    		Integer[] params = {idUnite, numeSemaine};
    		semaine = (Semaine) this.getHibernateTemplate().find(queryString, params).get(0);
     
    		return semaine;
    	}
    Et lorsque je fais apparaitre les log pour la requête HQL, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate : select semaine0_.idSemaine as idSemaine6_, semaine0_.dateDebutSem as dateDebu2_6_, semaine0_.dateFinSem as dateFinSem6_, semaine0_.dateModif as dateModif6_, semaine0_.idRoulementSem as idRoulem5_6_, semaine0_.idUnite as idUnite6_, semaine0_.nomUnite as nomUnite6_, semaine0_.numeroSemaine as numeroSe8_6_, semaine0_.roulementSem as roulemen9_6_, semaine0_.type as type6_ from gestionhoraire.semaine semaine0_ where semaine0_.idUnite=? and semaine0_.numeroSemaine=?
    Il me semblait que le HQL gérait les exceptions, cela n'est pas la cas ?
    Sinon, comment dois utilisé le :
    [CODE
    try/catch ou throws
    [/CODE]

    Merci de ton aide

  4. #4
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 562
    Points
    562
    Par défaut
    La question sur la gestion d'Exception était pour savoir si une exception n'était pas ignorée...

    as tu essayé de remplacer ton Instruction sql par le code HQL que je t'ai donné ?

    Que donne l'affichage de la semaine qu'Hibernate trouve miraculeusement ?
    fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system.out.println(semaine);
    après le get(0)

  5. #5
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Quand je souhaite insérer une nouvelle semaine, il ne me trouve rien.
    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system.out.println(semaine);
    que je mis après le ne me donne rien.

    C'est normal, étant donné que je souhaite insérer une semaine qui n'est pas existante en base de donnée.
    Comment je fais pour que, s'il ne trouve pas de résultat, il me renvoie une semaine null ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 562
    Points
    562
    Par défaut
    Bonjour,

    tu n'as pas répondu à la question : que donne le résultat de la requête en HQL ?
    String queryString ="from Semaine s where s.idUnite =? and s.numeroSemaine =?";
    Pour ce qui est de l'affichage dans la console de la semaine trouvée :
    Je te demandais de la faire après la ligne :
    semaine = (Semaine) this.getHibernateTemplate().find(queryString, params).get(0);
    Je vois mal comment un
    system.out.println(semaine);
    peut ne rien retourner...

    Comment est implémentée la méthode toString de la classe Semaine ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2015, 22h41
  2. Erreur "java.lang.IndexOutOfBoundsException: Index: 4, Size: 4"
    Par ddgrissa dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 04/12/2014, 12h32
  3. Réponses: 9
    Dernier message: 18/07/2013, 14h08
  4. java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    Par john_wili dans le forum Struts 1
    Réponses: 3
    Dernier message: 29/03/2009, 09h42
  5. Erreur java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    Par impossibeulman dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/08/2008, 15h18

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