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 :

[EJB3]Recupérer clée générée avant le persist


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Par défaut [EJB3]Recupérer clée générée avant le persist
    Bonjour,

    Pour des raisons métiers j'aurai besoin de récupérer une clef généré via un @GeneratedValue afin de faire une transformation sur celle ci avant que mon Entity soit persistée.

    Est ce possible ? il y a t'il moyen de recupérer cette valeur au moment de l évènement "pré-persist" ? ou de declencher manuellement la récupération de la valeur par le @GeneratedValue ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Avec quel stratégie?
    J'utilise généralement une séquence et, pour générer une référence unique par exemple, je mets la génération dans une méthode @PrePersist et j'accède le champ @Id

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    Salut,

    Je suis pas sur que cette solution soit portable (pas forcément essentiel me diras-tu).

    En effet ta solution sous entends que l'id est généré dans ta machine virtuelle par hibernate puisqu'il n'a pas besoin d'exécuter l'insert pour avoir l'ID.
    Quel est ta stratégie de génération ? quelle est ta base ?

    Suivant les bases et suivant la stratégie de génération, l'id est généré par un trigger de la base au moment de l'insertion => le callback prepersist te renverra donc null .. ou 0 suivant le type de ta pk

    Citation Envoyé par a.snaps Voir le message
    Avec quel stratégie?
    J'utilise généralement une séquence et, pour générer une référence unique par exemple, je mets la génération dans une méthode @PrePersist et j'accède le champ @Id

  4. #4
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Tu peux tout à fait "simuler" le comportement d'une séquence sur une DB qui ne les supporte pas.
    Par contre tu m'as mal compris! Ce n'est pas la PK que je génère, mais disons la référence unique de la commande genre: 2007I1234569 sur base de la valeur de la PK... La clé est bien générée par la DB.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    lors de l'invocation de @Prepersist, la valeur de la propriété Id n'est pas encore nécessairement positionné il me semble: dépend de la stratégie ainsi que de la base de donnée utilisée.

    Citation Envoyé par a.snaps Voir le message
    Tu peux tout à fait "simuler" le comportement d'une séquence sur une DB qui ne les supporte pas.
    Par contre tu m'as mal compris! Ce n'est pas la PK que je génère, mais disons la référence unique de la commande genre: 2007I1234569 sur base de la valeur de la PK... La clé est bien générée par la DB.

  6. #6
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    C'est bien ce que je dis!
    Avec une séquence, tu as l'id avant l'insert! Et si ta DB ne supporte pas les séquence tu peux les simuler via une table!
    :'(

Discussions similaires

  1. EJB3 Exclure un champ de la persistance
    Par jadey dans le forum Persistance des données
    Réponses: 2
    Dernier message: 21/06/2014, 19h18
  2. Mettre à jours plusieurs entitées avant un persist()
    Par kyryan68 dans le forum Doctrine2
    Réponses: 1
    Dernier message: 18/07/2012, 15h34
  3. Réponses: 1
    Dernier message: 16/12/2011, 05h51
  4. [iBatis] Récupération de la clé auto-générée avant la fin de la transaction
    Par sarsipius dans le forum Persistance des données
    Réponses: 1
    Dernier message: 08/06/2009, 16h31
  5. Réponses: 2
    Dernier message: 03/12/2005, 20h43

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