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 :

Soucis d'insertion/Update dans la base de données


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Par défaut Soucis d'insertion/Update dans la base de données
    Bonjour à tous,

    Je viens vers vous pour un petit soucis.J'ai une base de données avec 2 tables : Un élément principal avec toutes ces infos (nom, attributs, etc) et une autre table en relation avec la première qui contient toutes des infos supplémentaires ainsi que l'ID vers l'élément principal (relation many to one)L. orsque j'essaye de faire un saveOrUpdatedes infos supplémentaires avec Hibernate, celui-ci m'exécute un update au lieu d'un save si les éléments ne sont pas encore dans la base de donnée, du coup il me sort l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveorupdate org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    En cherchant sur Google j'ai remarquer que cette erreur arrivait parce qu'Hibernate se base sur la clé primaire pour faire les update, hors je n'en ai pas dans cette table. Par contre, lorsque je fais un simple save, là les éléments sont biens sauvés, sauf l'ID qui n'est pas repris, mais est ajouter tout seul par Hibernate comme si c'était un auto généré alors que ça ne l'est pas, il ne prend donc pas en compte l'ID que je lui donne au moment de la sauvegarde.

    Le code suivant m'affiche bien le bon ID dans la console, on va dire 16 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public long save(MetaRelationExtraCode metaRelationExtraCode) {
    		System.out.println("ID Relation Dao : " + metaRelationExtraCode.getId());
     
    		sessionFactory.getCurrentSession().save(metaRelationExtraCode);
     
    		return 0;
    	}
    Mais dans la base de donnée, je me retrouve avec un ID qui est a 1262... Au niveau du controlleur je set les attributs de ma classe de cette façon (valeurs récupéré en ajax depuis un formulaire) :
    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
    @RequestMapping(value="/relationExtraCode", method=RequestMethod.GET)
    	@ResponseBody
    	public boolean addRelationExtraCode(@RequestParam("relationId") Long id,
    										@RequestParam("imports") String imports,
    										@RequestParam("tags") String tags,
    										@RequestParam("code") String code){
     
    		MetaRelationExtraCode relationExtraCode = new MetaRelationExtraCode();
     
    		relationExtraCode.setId(id);
    		relationExtraCode.setExtraImport(imports);
    		relationExtraCode.setExtraTag(tags);
    		relationExtraCode.setExtraCode(code);
     
    		metaRelationExtraCodeService.save(relationExtraCode);
     
    		return true;
    	}
    J'ai mis des Sysout un peu partout pour suivre le chemin de la classe jusqu'à sa sauvegarde en base de donnée et y'a aucuns soucis, les valeurs ne changent pas jusqu'au save, surtout que les autres attributs sont bien sauvés, y'a vraiment que l'ID qui pose problème. quelqu'un à une solution à me proposer ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    Salut
    comment generes - tu tes ID?
    et pourquoi ne recuperes tu pas ton ID juste apres l´insertion?
    car il te dit bien qu´il n´a pas trouver de ligne correspondant dans la base de données

    Eric

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Par défaut
    Bonjour,

    L'ID est récupéré depuis le formulaire de l'élément principal via un champs caché, et cet ID est généré automatiquement à l'insertion de l'élément principal dans la DB

    En gros ça fait ça :

    -J'affiche le formulaire pour modifier l'élement principal
    - Sur le formulaire principal, il y a un bouton qui permet d'afficher un second formulaire caché, le second formulaire sert à ajouter/modifier les infos supplémentaires à l'élément principal (seulement dans le cas d'une édition de l'élément principal, à la création de l'élément principal je n'ajoute rien via le formulaire caché).
    - Requête Ajax qui envoie le second formulaire pour l'ajout dans la DB en récupérant au passage l'ID du formulaire principal.

    Je n'ai pas compris le fait de récupérer l'ID après l'insertion désolé.

    Oui je suis au courant qu'il ne me trouve pas la ligne correspondante dans la DB, c'est justement ça le problème en partie. Ce problème s'affiche lorsque je fais un saveorUpdate. Si des éléments sont déjà présents dans la DB (je suis parti d'une base de donnée déjà existante avec des trucs dedans) en tant qu'infos supplémentaires il me fait la mise à jour sans problème, mais si il n'y a rien dans la DB, il essaye quand même de faire un update plutôt qu'un insert.

    Et quand je change le saveOrUpdate par un simple save (ou merge, il fait la même chose dans les deux cas), il ajoute bien dans la base de donnée ce qu'il faut, sauf l'ID, il ne reprend pas celui que je lui donne via le set dans le controlleur mais en insert un lui même comme si le champs ID étant un champs généré automatiquement alors qu'il ne l'est pas.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Par défaut
    Personne pour m'aider ?

    J'ai toujours ce problème que je n'arrive pas à résoudre

  5. #5
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    quelle type de schema as-tu opté pour tes tables?
    tu dois creer une classe abstract qui contient l´info, et une autre classe normal qui extended la classe abstract.
    et la tu pourras faire ce que tu veux faire.
    Si cela n´est pas claire, donnes nous les code de tes classes.

    Eric

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2013, 14h45
  2. [AJAX] Insertion erroné dans la base de données
    Par DeeVoiD dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/01/2009, 15h22
  3. Insertion Enorme dans une base de données
    Par jad_jad dans le forum Débuter
    Réponses: 3
    Dernier message: 06/06/2008, 18h02
  4. Réponses: 2
    Dernier message: 11/09/2007, 14h41
  5. [HTML] Probleme d'insertion HTML dans une base de données MySQL
    Par tarzanjane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/09/2006, 12h12

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