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

JPA Java Discussion :

Trigger mysql et primary key


Sujet :

JPA Java

  1. #1
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut Trigger mysql et primary key
    Bonjour,

    Quelqu'un saurait-il comment on peux gérer en JPA (ou à defaut en hibernate), une table dont les primary key sont créées par un trigger en mysql?

    En Oracle, c'est facile, on crée le trigger, on mappe la primary key avec un genérateur "identity" et JPA récupère sans problème la clé. Je pense qu'en interne ça passer par un select du ROWID mais bon.

    En mysql, je n'arrive pas à créer ça. Pour des raisons obscures, hibernate se plaint que le serveur n'as pas généré de valeur pour la colonne id. Pourtant, quand je vais en ligne de commande dans la table et que j'exécute la même requête que hibernate (le insert), ça se passe sans soucis et l'id est bien généré par le trigger. On dirait que le "IDENTITY" avec le dialecte mysql ne fonctionne qu'exclusivement avec les auto increment, ce qui ne m'arrange pas. J'ai contourné pour le moment le problème avec un générateur custom qui va appeler la même procédure que le trigger et mettre la valeur dans l'id avant de faire le create mais bon, ça nécessite un aller-retour pour généré chaque id, ce qui n'est pas génial.

    Quelqu'un aurait-il une solution?

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Pour les clés primaires générées par un trigger, il faut utiliser le générateur "select" et non pas "identity".
    select

    retrieves a primary key, assigned by a database trigger, by selecting the row by some unique key and retrieving the primary key value.
    https://docs.jboss.org/hibernate/orm...declaration-id

    A+.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le générateur select suppose que j'ai une autre colonne unique dans ma table sur laquelle je me base pour récupérer la row. Non seulement ce n'est pas mon cas (c'est la primary key mon truc unique), mais de toutes façons ça nécessite un round-trip supplémentaire.

    Apparement, je me prends le bourrichon pour rien, dans tous les cas on a un roundtrip, l'identity fait un second appel à "select last_insert_id()", je pensais que jdbc retournait directement l'id lors du insert.

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

Discussions similaires

  1. Trigger PRIMARY KEY ne fonctionne pas
    Par DUALTECH dans le forum InterBase
    Réponses: 4
    Dernier message: 31/05/2012, 17h06
  2. [Php/MySQL] Primary key sur plusieurs champs
    Par Elendill dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/04/2009, 17h20
  3. [MySQL] requête avec WHERE sur primary key
    Par newbiemac dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/09/2007, 10h41
  4. mysql problème primary key en auto_increment
    Par red210 dans le forum Outils
    Réponses: 2
    Dernier message: 01/08/2007, 14h18
  5. BDD, r-a-z index et indice primary key ?
    Par lord_paco dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 11/07/2003, 11h24

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