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 :

MAJ BDD non prise en compte


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut MAJ BDD non prise en compte
    Bonjour,

    Quand je mets à jour une donnée dans ma BDD via Toad + commit, je ne la retrouve pas dans mon application.

    Cette info concerne un nouvel element qui devrait apparaitre dans une liste oneToMany en mode lazy.

    A contient une liste de 3 B en lazy, apres la mise à jour via toad, en relançant le A.getBListe() je devrais avoir 4 B dans la liste. Mais j'en ai toujours que 3 .

    j'aimerais bien trouver une soluce avant de passer à L'EJB-QL
    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    j'ai tenté le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A.getListB().size();
    monRetour = A.getListB();

    Le :
    semblait une bonne piste

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    Précision :
    Aprés 30 à 60 min, je peux enfin récuperer les bonnes infos.

    Y a t il une option, un parametre ?

    Env : Glassfish sun app server / EJB3 / JPA / TOPLINK / ORACLE

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    Désolé, voici le vrai probleme :

    Quand je mets à jour la bdd via une autre application, la couche de persistence ne prends en compte cette modification qu'aprés un long délais.

    Connaissez vous un paramétre ou une option à ajouter(modifier) pour ne pas avoir de délais ?

    Le probléme ne concerne pas les LAZY car quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private EntityManager em;
    HotelsSystem hotelSystem = em.find(HotelsSystem.class,hotelReference.getCode());
    Et que j'ais modifié l'enregistrement de hotelSystem via Toad + commit, je ne retrouve pas l'info dans mon application.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mickael.guilbert Voir le message
    Bonjour,

    Quand je mets à jour une donnée dans ma BDD via Toad + commit, je ne la retrouve pas dans mon application.

    Cette info concerne un nouvel element qui devrait apparaitre dans une liste oneToMany en mode lazy.

    A contient une liste de 3 B en lazy, apres la mise à jour via toad, en relançant le A.getBListe() je devrais avoir 4 B dans la liste. Mais j'en ai toujours que 3 .

    j'aimerais bien trouver une soluce avant de passer à L'EJB-QL
    Merci
    c'est un problème de cache, étant donné que vous modifiez la DB en dehors de la webapp, celle-ci n'a aucun autre moyen de constater une modification de la liste @OneToMany qu'en détectant une modification du "owner" de cette relation…

    si vous avez un champ @Version dans ce dernier vous devriez le mettre à jour lorsque vous modifiez la liste @OneToMany dans Toad.

    Peut-être aussi qu'en ajoutant un champ @Formula("( SELECT COUNT(*) FROM ONETOMANY_RELATED r WHERE r.ref_owner = id )") qui donc compte le nombre d'éléments de la relation @OneToMany et en y accédant en début du parcours de la liste, vous pourriez provoquer un rafraîchissement de la cache…


    Aussi TopLink a la possibilité de spécifier
    hints={@QueryHint(name="toplink.refresh", value="true")}
    dans les @NamedQuery

    Et reste encore la possibilité de provoquer un evict() à la demande d'un "owner" déterminé dans votre webapp…

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    c'est un problème de cache, étant donné que vous modifiez la DB en dehors de la webapp, celle-ci n'a aucun autre moyen de constater une modification de la liste @OneToMany qu'en détectant une modification du "owner" de cette relation…
    Sans parler de oneToMany (1 obj = une table), peut on etre sur que si je modifi un record, le find me ramenera bien les bonnes valeurs ?

    Citation Envoyé par JeitEmgie Voir le message
    Aussi TopLink a la possibilité de spécifier
    hints={@QueryHint(name="toplink.refresh", value="true")}
    dans les @NamedQuery
    --> c'est parfait

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    Citation Envoyé par mickael.guilbert Voir le message
    Sans parler de oneToMany (1 obj = une table), peut on etre sur que si je modifi un record, le find me ramenera bien les bonnes valeurs ?

    Je viens de faire le test, ca ne marche pas

    je fais un find sur un "utilisateur" & affiche son nom
    Je vais dans la base et change son nom
    Je refais un find sur cet "utilisateur" & son nom n'a pas changé.

    PS : le 2 find sont dans 2 transactions differentes

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mickael.guilbert Voir le message
    Je viens de faire le test, ca ne marche pas

    je fais un find sur un "utilisateur" & affiche son nom
    Je vais dans la base et change son nom
    Je refais un find sur cet "utilisateur" & son nom n'a pas changé.

    PS : le 2 find sont dans 2 transactions differentes
    1.
    2.
    en dehors des @NamedQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    em.createQuery("…").setHint("toplink.refresh", "true")
    3.
    aussi possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    em.createQuery("…").setHint("toplink.pessimistic-lock", "Lock")

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Par défaut
    Pour toutes les recherches qui nécessitent une requete EJB-QL et dont les infos dans la base sont suceptibles de changer , j'ai fais le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @NamedQuery(name = "Hotels.findAllBetween2Date", 
                    query = "SELECT h from Hotels h WHERE h.hdi=:hotelId AND ...",
                    hints={@QueryHint(name="toplink.refresh", value="true")})
    et ça fonctionne tres bien (merci)

    Sinon pour les chargements depuis un "find" sur certains objets je serais obligé de faire un "refresh" juste apres ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    em.find(userKiPeutEtreModifiéParAppliExterne)
    em.refresh(userKiPeutEtreModifiéParAppliExterne)

Discussions similaires

  1. [Data] Transaction non prise en compte par outil de dump de bdd
    Par Laurent.B dans le forum Spring
    Réponses: 7
    Dernier message: 17/12/2008, 20h02
  2. Installation SP2 + RAM non prise en compte
    Par laure_belette dans le forum Windows XP
    Réponses: 3
    Dernier message: 13/10/2005, 12h46
  3. [css] Feuille de style non prise en compte
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/06/2005, 11h49
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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