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 :

Sequence Oracle : double incrémentation


Sujet :

Hibernate Java

  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut Sequence Oracle : double incrémentation
    Bonjour,

    J'utilise une sequence oracle lors de l'insertion d'un element via hibernate.
    Mais cette séquence s'incrémente de 2 à chaque insertion alors que je suis le seul à l'utiliser et qu'elle est bien configurée pour une incrémentation par pas de 1.

    J'utilise une base de données Oracle 9 et hibernate est configuré avec un dialect Oracle 9.

    Voici le mapping de ma séquence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <id name="id" type="long" column="RESP_ID">
    	<generator class="sequence">
    		<param name="sequence">SEQ_ECM_FORM_RESULT</param>
    	</generator>
    </id>
    Quelqu'un aurait déjà eu ce genre d'erreur?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Woodwai,

    Je me permet de demander un complément à ta question pour voir si les idées que j'ai en tête ne sont pas farfelues.

    Si tu fais un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session = HibernateUtil.currentSession();
    tx.beginTransaction();
    TonObjet x = new Object();
    session.save(x);
    tx.commit();
    session.close();
    ( attention ce code est imprécis, j'ai pas d'environnement de travail à dispo )

    En mettant un breakpoint sur la création de ton objet et un autre après le close(), est-ce que tu as bien un saut de 2 dans ta séquence ?
    Si oui, alors quelles sont les requêtes SQL jouées par Hibernate entre ces 2 instants ?
    Si non, alors je pense que le problème est ailleurs dans la manipulation de l'objet.

  3. #3
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Hello Neoh59,

    Je comprend ou tu veut en venir (incrémentation de séquence une fois lors du new et une foi lors du commit). Mais je n'ai pas ce cas là, je fait le new avant d'ouvrir ma transaction.

    Je penche en fait pour un problème plus lié à la base de données qu'à hibernate.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Euh, en fait c'était pas du tout mon idée.
    De toute façon lors du new il n'y aura pas d'incrémentation de la séquence (pas d'appel à NEXTVAL()) car ton objet n'est pas encore rattaché à la session. Pour l'objet getId() sera NULL.

    Je pense que ton mapping Hibernate est bon.
    Je pense que la config de ta séquence en BDD est bonne.
    ( tu peux faire toi même un NEXTVAL() pour vérifier que le pas est de 1, si c'est pas déjà fait )

    En fait je pensais à diverses pistes mais qui reviendraient un peu au même, qu'il y ait des traitements dans ton application qui fassent que 2 instances soient créées. Et donc qu'Hibernate ait besoin 2 fois d'interroger la séquence. Et par la suite seulement 1 seule de ces instances est commitée.

    Donc en effectuant ce que j'ai dit, tu pourrais voir cela. Si l'incrémentation est de 2 en effectuant ce traitement, alors les logs des requêtes SQL jouées pourraient t'en dire plus.

    Voilà.

    PS: ex: J'avais eu un soucis une fois où mon enregistrement était inséré, puis supprimé, puis de nouveau inséré, tout ça à cause de divers impacts de mappings liés à mon objet.

Discussions similaires

  1. Equivalent Sequence Oracle en SQLServer
    Par Gabbe_pro dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 25/02/2010, 21h32
  2. pb appel sequence oracle
    Par etham dans le forum Oracle
    Réponses: 3
    Dernier message: 13/11/2006, 15h05
  3. genID pour sequence oracle
    Par COULON dans le forum XMLRAD
    Réponses: 4
    Dernier message: 11/04/2006, 11h54
  4. [EJB2.1 Entity] EJB Entite CMP et sequence Oracle
    Par kaiser2003 dans le forum Java EE
    Réponses: 5
    Dernier message: 11/03/2006, 10h42
  5. [ORACLE 10G]Incrémentation d'une date d'un jour
    Par titanblanc dans le forum Oracle
    Réponses: 2
    Dernier message: 05/01/2006, 11h07

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