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

Java EE Discussion :

récuperer la clé primaire génerée automatiquement [EJB3 Entity]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Par défaut récuperer la clé primaire génerée automatiquement
    Bonjour à tous.
    j'ai crée une Entity avec un ID qui est généré automatiquement avec l'annotation @GeneratedValue(strategy = GenerationType.AUTO)
    ma question est : commment récupérer l'ID juste aprés la création de l'enregistrement (j'ai besoin d'imprimer l'enregistrement au moment même de sa création, et je voulais savoir s'il y a une methode autre que de faire une requête qui contient les informations qui identifient l'enregistrement de façon unique).
    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par berioua
    commment récupérer l'ID juste aprés la création de l'enregistrement
    Un appel à la méthode getId() ne suffit pas ?

  3. #3
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut 1 solution pour récupérer l'id généré automatiquement
    D'après ce que j'ai vu, lorsque tu mets la génération de l'id en auto, il se crée au moment où tu fais le persist.

    Ce qui me parait logique vu que c'est le SGBD derrière qui génére la valeur au moment où il fait l'instruction INSERT

    Le truc est de modifier ta fonction dans ton SessionBean qui fait le persist par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public MyEntity addMyEntity(MyEntity myEntity) {
       em.persist(myEntity);
       return myEntity;
    }
    Comme cela, après tu peux invoquer la méthode getId pour récupérer ton id.

    Si tu cherches aussi à mettre à jour un enregistrement de ton entity, il faut utiliser la méthode merge de la classe EntityManager (j'ai chercher un moment avant de la trouver celle-là )

  4. #4
    Membre confirmé
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Par défaut
    bonjour,

    j'ai la essayer mais elle ne pas marché voici l'erreur:

    ERROR [STDERR] javax.ejb.EJBException: java.lang.IllegalArgumentException: Wrong target. class model.SessionEJBBean for public model.RecTPjointe model.SessionEJBBean.persistRecTPjointe(model.RecTPjointe)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:263)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:412)
    2007-06-21 10:12:45,531 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)


    mon code est :
    dans sessionEJB:
    ..........
    public RecTPjointe persistRecTPjointe(RecTPjointe entity) {
    em.persist(entity);
    return entity;
    }
    ..........

    dans mon class :

    System.out.println("eeee id est 03 "+sessionEJB.persistRecTPjointe(pjointe).getId());

    pour afficher le id,

    j'ai essayé plusieurs essais mais ça ne pas marché.

  5. #5
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    Bonjour mbouzouita,

    chez moi, cela fonctionne.
    Mais j'ai rajouté une ligne par rapport à ce que j'avais trouvé à l'époque.

    Essaie avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public RecTPjointe persistRecTPjointe(RecTPjointe entity) {
       em.persist(entity);
       em.flush(); // -> pour obliger le système a vider ses caches et à executer  l'INSERT de suite avec rafraichissement de l'objet
       return entity;
    }

  6. #6
    Membre confirmé
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Par défaut
    non , c'est le meme probleme ???

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/11/2007, 20h36
  2. Réponses: 10
    Dernier message: 17/03/2007, 14h05
  3. Récuperer la clé primaire après un insert
    Par JohnWinshark dans le forum Access
    Réponses: 2
    Dernier message: 22/08/2006, 13h47
  4. Generer et incrementer automatiquement le clé primaire d'un
    Par ravelo dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2004, 20h12

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