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 :

Erreur d'insertion de données


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut Erreur d'insertion de données
    Bonjour,

    J'ai une table User dont l'unique attribut (clé primaire) est login (varchar 128).

    lors de l'insertion d'une valeur, l'erreur suivante m'est renvoyée et une ligne vide est insérée:

    The database returned no natively generated identity value.

    voici le code de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TABLE `user` (
      `login_user` varchar(128) NOT NULL default '',
      UNIQUE KEY `login_user` (`login_user`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    et voici le mapping Hibernate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <class name="User" table="user" catalog="omni">
            <id name="login" type="java.lang.String">
                <column name="login_user" length="128"/>
               	<generator class="native" />
            </id>
    Au regard de l'erreur, le problème semble venir de <generator class="native" /> mais quand je l'enleve ou le modifie, aucune ligne n'est insérée. Est-il au moins possible d'inséré une clé primaire String ?

    Merci d'avance pour vos suggestions....

  2. #2
    agi
    agi est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Par défaut
    Salut,
    Je pense qu'on ne peut utiliser <generator class="native" /> que pour des champs de type numérique (long, short ou int d'après la doc d'Hibernate).
    A mon avis, il faudrait créer ta propre classe de génération (implements org.hibernate.id.IdentifierGenerator) et la référencer dans le hbm comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <class name="com.sqli.sixmmx.omniwidget.model.User" table="user" catalog="omniwidget">
            <id name="login" type="java.lang.String">
                <column name="login_user" length="128"/>
               	<generator class="mon.package.MaClasseGenerator" />
            </id>

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Salut, merci pour ta réponse

    Je comprends mal le rôle de cette classe de génération, elle me permettrait de générer un Id qui ne correspondrait à rien dans la BD. A ce moment là, ne serait-il pas plus simple de créer un user_id dans la table user ?

  4. #4
    agi
    agi est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Par défaut
    Cette classe te permettra de décrire comment est généré l'id.
    L'interface contient la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Serializable generate(SessionImplementor session, Object object)
    qui, dans ton cas retournera une String.
    Ca permet d'extraire la gestion de la clé primaire de ton code. A chaque insertion, cette classe sera appelée pour générer l'identifiant selon la méthode que tu auras défini dans la méthode generate().

Discussions similaires

  1. Erreur d'insertions de données
    Par SonnyFab dans le forum ASP.NET
    Réponses: 17
    Dernier message: 24/06/2010, 08h21
  2. erreur script insertion de données
    Par sambzh24 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 13/02/2008, 12h11
  3. erreur d'insertion de données?
    Par hicham_alaoui1 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/09/2007, 14h18
  4. Erreur d'insertion de données a partir de fichier cvs
    Par iam_free dans le forum Outils
    Réponses: 1
    Dernier message: 23/08/2007, 12h34
  5. Réponses: 6
    Dernier message: 02/06/2005, 12h44

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