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 :

HIbernate et sequence oracle


Sujet :

Hibernate Java

  1. #1
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut HIbernate et sequence oracle
    Bonjour,

    Voila je debute avec hibernate et je suis confronté à un petit probleme.
    J'ai une classe User, avec 4 string, j'ai fait les getters et setters pour tous.

    Dans le mapping de hibernate j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <class name="com.maxf1.struts.forum.type.User" table="USERS">
     
    <id name="id" type="java.lang.String" column="USERID" unsaved-value="null" >
       <generator class="sequence">
          <param name="sequence">USERS_1SQ</param>
        </generator>
    </id>
     
    <property name="username" type="java.lang.String" column="USERNAME"/>
    <property name="password" type="java.lang.String" column="PASSWORD"/>
    <property name="privilege" type="java.lang.String" column="PRIVILEGE"/>
     
    </class>

    Lorsque ma table est vide il n'y a aucun probleme, il m'ajoute mon premier user, l'id vaut 1.

    J'essayer de rajouter un 2ieme User, mais la ca ne marche pas!! En effet l'ID n'est pas incrementer dans ma sequence. A chaque fois il repart à 1. Et comme l'ID est la primaryKey de ma table alors ca plante.

    Ma question est pourquoi hibernate me fait repartir ma sequence à 1 (§en gros il me la re-initialise)

    Il est a noter qu'avant je faisait moi meme le mapping entre la classe et le user, et la sequence fonctionnait très bien. D'ailleurs si je prend TOAD, et que je fais nextval de la sequence elle est bien incrementer mais si je reessaye avec hibernate il me la remet 1.

    Si quelqu'un pouvait m'aider je lui en serait reconnaissant.
    Merci

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Pourquoi ton id est de type String ?
    Ne penses tu pas que le problème vient de là ?

  3. #3
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    J'ai changé, j'ai remplacer String par long.

    Voir ce lien, j'ai fait comme eux, l'ID en long.
    http://www.hibernate.org/hib_docs/v3...-mappings.html

    Ca s'enregistre niquel pour le premier enregistrement. Mais pour le deuxieme enregistrement il recommence la sequence, donc toujours un plantage a cause que l'id n'est pas unique.


    Si vous avez d'autre piste à me donner je suis preneur car je ne vois pas pourquoi il ne veut pas.

  4. #4
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Pour essayer de contourner mon probleme, j'ai voulu créer un trigger qui inserer la valeur. Malheureusement lors de l'enregistrement de mon User, ca plante car hibernate ne voit pas le trigger. Alors qu'avec toad, je vois mon trigger (ce n'est pas un probleme de COMMIT, car je l'ai fait).

    Mais une fois que hibernate a essayer d'enregistrer mon USER, le trigger à disparu, il a été déplacé dans la corbeille (me dit toad).
    Quelqu'un a-t-il deja eu quelque chose de semblable?


    ME

    Je n'ai plus de solution alternative, je ne trouve aucune solution sur le net.
    Ma config, ORacle 10g express edition

    Et le fichier hibernate.cfg.xml

    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
    <hibernate-configuration>
     
        <session-factory>
     
            <!-- Database connection settings -->
            <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
            <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
            <property name="connection.username">test</property>
            <property name="connection.password">test</property>
     
            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</property>
     
            <!-- SQL dialect -->
            <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
     
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>
     
            <!-- Disable the second-level cache  -->
            <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
     
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
     
            <!-- Drop and re-create the database schema on startup -->
            <property name="hbm2ddl.auto">create</property>
     
            <mapping resource="mapping/User.hbm.xml"/>
     
        </session-factory>
     
    </hibernate-configuration>

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    OOpppsssss , désolé,

    Je viens de voir pourquoi la sequence est remise a 0. Pourquoi le trigger aller a la poubelle.
    J'ai vu ma boulette lorsque j'ai poster le xml de hibernate config.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <property name="hbm2ddl.auto">false</property>
    Il faut mettre false et pas create sinon il la recrée a chaque fois!!!

    Donc la pour ma sequence ca passe nickel!!!

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

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. Sequence Oracle : double incrémentation
    Par woodwai dans le forum Hibernate
    Réponses: 3
    Dernier message: 10/11/2006, 13h50
  4. genID pour sequence oracle
    Par COULON dans le forum XMLRAD
    Réponses: 4
    Dernier message: 11/04/2006, 11h54
  5. [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

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