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 : Problème d'identifiant


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Hibernate : Problème d'identifiant
    Bonjour à tous.
    Je sollicite les experts Hibernate car j'ai un un problème que je ne comprends pas. Je découvre Hibernate et je tente d'insérer un objet dans une base Oracle : l'enregistrement se passe bien mais je me retrouve avec un décalage de 1 entre l'identifiant retourné par session.save(monObjet) et l'enregistrement crée en base de données.
    (En fait, qand session.save() me retourne par exemple 49, mon enregistrement dans la BDD porte le N°50 ).
    Mon fichier de mapping :
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 22 mai 2013 08:40:30 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="com.hibernate.Affectation" table="AFFECTATION">
            <id name="noaffect" type="short">
                <column name="NOAFFECT" precision="3" scale="0" />
                <generator class="native">
    			    <param name="sequence">SILOSEQ</param>
      			</generator>
     
           </id>
            <property name="lib" type="string">
                <column name="LIB" length="60" not-null="true" />
            </property>
            <property name="liba" type="string">
                <column name="LIBA" length="10" />
            </property>
        </class>
    </hibernate-mapping>
    Mon fichier de config :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="hibernate.connection.password">.....</property>
            <property name="..."</property>
            <property name="hibernate.connection.username">....</property>
            <property name="hibernate.default_schema">.....</property>
            <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
     
            <!-- Formater sql -->
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
            <!-- List of XML mapping files --> 
            <mapping resource="com/Hibernate/Affectation.hbm.xml"/>
            <mapping resource="com/Hibernate/Fonction.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    Et enfin mon fichier de test :

    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
     
    package com.test;
     
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
     
    import com.hibernate.Affectation;
     
    public class Test {
    	private static SessionFactory factory;
     
    	public static void main(String[] args) {
     
    		try {
    			factory = new Configuration().configure().buildSessionFactory();
    		} catch (Throwable ex) {
    			System.err.println("Failed to create sessionFactory object." + ex);
    			throw new ExceptionInInitializerError(ex);
    		}
    		Test test = new Test();
    		// Creation nouveau Silo
    		System.out.println("nouveau silo crée :"
    				+ test.ajouterSilo("nouveauSilo"));
    	}
     
    	public Short ajouterSilo(String nomSilo) {
    		Session session = factory.openSession();
    		Transaction tx = null;
    		Short siloID = null;
    		try {
    			tx = session.beginTransaction();
    			Affectation newSilo = new Affectation();
    			newSilo.setLib(nomSilo);
    			System.out.println("avant save : " + newSilo.getNoaffect());
    			siloID = (Short) session.save(newSilo);
    			System.out.println("apres save : " + newSilo.getNoaffect());
    			tx.commit();
     
    		} catch (HibernateException e) {
    			System.out.println("oups");
    			if (tx != null)
    				tx.rollback();
    			e.printStackTrace();
    		} finally {
    			session.close();
    		}
    		return siloID;
     
    	}
    }
    D'avance un grand merci à toute personne qui puisse me mettre sur la voie ...

  2. #2
    Membre actif Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Points : 205
    Points
    205
    Par défaut
    Bonjour,

    Essaie de modifier le générateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <generator class="native"/>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Bonjour Hbennou, merci pour ta réponse mais si je ne mets que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <generator class="native"/>
    Dans mon mapping, je lève une exception Oracle selon laquelle il ne trouve pas la séquence.
    C'est pour cela que j'ai du rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <param name="sequence">SILOSEQ</param>
    dans mon fichier de mapping.
    En tout cas merci quand même

  4. #4
    Membre actif Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Points : 205
    Points
    205
    Par défaut
    Ce que je voulais te dire c'est de modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <generator class="native"/>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <generator class="sequence">

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Salut Hbennou,
    Je pense avoir trouvé la solution :
    En fait cela doit venir du fait qu'hibernate utilise la séquence Oracle mais que dans la Base de données j'ai également un trigger qui utilise cette séquence.
    Je me retrouve donc avec ma séquence qui est incrémentée deux fois lors de l'ajout.
    J'ai donc modifié le trigger en ajoutant une clause When comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create or replace
    trigger sa.my_trigger
    before insert on sa.my_table
    for each row
    when (new.id is null)
    begin
       select sa.my_sequence.nextval
        into :new.id
        from dual;
    end;
    et toutcela semble fonctionner.
    En tout cas merci de t'être penché sur mon problème

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

Discussions similaires

  1. [STRUTS/HIBERNATE] Problème d'exécution de requête
    Par mc_chicken dans le forum Hibernate
    Réponses: 5
    Dernier message: 21/10/2005, 09h27
  2. [hibernate] Mapping avec identifiant composé
    Par miky_jo dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/10/2005, 16h48
  3. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  4. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  5. [plugin hibernate] problème d'installation
    Par slymira dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/06/2005, 13h06

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