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 :

Problème avec entityManager.find()


Sujet :

JPA Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 60
    Points : 44
    Points
    44
    Par défaut Problème avec entityManager.find()
    Bonjour,

    J'ai une classe Intervention qui contient une liste d'appel et chaque appel contient une liste d'analyse.

    Lorsque que je fait un EntityManager.find(Intervention.class,idDeMonIntervention) j'ai bien mon objet Intervention complet et JPA m'a bien rempli ma liste d'appel et pour chaque appel j'ai bien ma liste d'analyse.

    Maintenant j'ajoute un objet Analyse en base relié à un appel de mon intervention => l'analyse à correctement persisté en base de donnée

    Je refait un EntityManager.find(Intervention.class,idDeMonIntervention) => mon objet analyse n’apparaît pas dans la liste d'analyse de l'appel dans lequel il aurait du se trouver.

    Je fait un Run de mon projet sur NetBean et je refait un EntityManager.find(Intervention.class,idDeMonIntervention) => mon objet Intervention est complet et contient bien l'analyse ajouté précédemment.

    J'ai viré le cache dans persistance.xml

    Avez vous une idée d'ou pourrait venir ce problème ?

    Cordialement

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    l´entitymanager est injecté (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @PersistenceContext(unitName="")
    ) ou créer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Persistence.createEntityManagerFactory()
    Merci.

  3. #3
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    une question:as-tu essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entitymanager.refresh(tonentité);
    Eric

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Reisors Voir le message
    Avez vous une idée d'ou pourrait venir ce problème ?
    L'objet est en cache, ou attaché à une session active, donc le find ne fait rien que de représenter l'objet précédemment chargé. Je suppose que si tu gérais des versions, il aurait rechargé l'objet si celle-ci avait changé mais je n'ai pas testé et ça pourrait être dépendant de l'implémentation de JPA.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 60
    Points : 44
    Points
    44
    Par défaut re
    Bonjour,

    Alors oui l'entityManager est injecter, et c'est bien un problème de cache !
    J'ai résolu le souci avec un setHint() mais du coup je comprend plus comment tous sa marche ...

    Pourquoi :
    - lorsque j'ajoute un appel à mon intervention je vois l'appel dans l'intervention après avoir fait un find() de l'intervention ?
    - lorsque j'ajoute une analyse à un appel de mon intervention, après avoir fait un find() de l'intervention je ne vois pas l'analyse ?

    Comment prévenir le l'objet en cache qu'il à changer après avoir fait un merge() ?, car faire un refresh après un find() c'est bien beau mais du coup le cache ne sert plus à rien ...

    Merci pour vos explications

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 60
    Points : 44
    Points
    44
    Par défaut re
    Alors je vient de répondre partiellement à mes question,

    - Le cache quoi m’embête est du L2 puisqu'il est partagé avec mes différents utilisateurs (J'ai fait le test)

    - Pour dire à l'objet en cache qu'il à changer (donc le détacher), il faut déclencher une transaction sur l'objet sur lequel on va faire le find() plus tard, exemple :

    Dans mon souci (voir 1er post) je faisais un merge(monAnalyse), je suppose donc que l'objet appel en cache n'a pas été détaché !
    Par contre si je fait un merge("mon appel qui contient l'analyse cree") c'est bon, l'objet appel à été détacher et sera récupéré de la BDD au prochain find()



    Plausible ou pas ? en tous cas chez moi sa marche maintenant et sans le setHint() !!

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

Discussions similaires

  1. Problème avec EntityManager
    Par yotta dans le forum NetBeans Platform
    Réponses: 6
    Dernier message: 01/10/2013, 02h23
  2. [XL-2007] Problème avec Methode Find
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2013, 17h30
  3. [XL-2003] Problème avec fonction Find
    Par RussellD dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/09/2010, 12h46
  4. [List<>] Problème avec le Find()
    Par Titi41 dans le forum SL & STL
    Réponses: 5
    Dernier message: 16/05/2009, 16h39
  5. Réponses: 6
    Dernier message: 17/04/2005, 10h58

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