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 :

JPA et actualisation des entités


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 109
    Par défaut JPA et actualisation des entités
    Bonjour,

    Je charge une liste de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    @Override	public List<Eleve> listEleves() {
    		List<Eleve> le = em.createQuery("SELECT e FROM Eleve e").getResultList();
    returnle;
    	}
    Si je modifie un élément de la liste directement dans la bd et que je rappelle ma liste, elle ne s'actualise pas.

    Que dois-je faire au niveau de l'EntityManager pour qu'il actualise mes données ?

    Merci

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas le comportement normal, utiliserais-tu un cache ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 109
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ce n'est pas le comportement normal, utiliserais-tu un cache ?
    Je croyais que JPA gérait lui-même deux niveaux de cache de 1er et 2ème niveau ?

    J'ai implémenté un DAO avec la méthode suivante pour retourner ma liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    @Overridepublic List<Eleve> listEleves() {
    
    
    	List<Eleve> le = em.createQuery("SELECT e FROM Eleve e").getResultList();
    logger.info("---> eleve list  size " + le.size());
    	em.refresh(le); /* je fais un essai ici qui n'est pas concluant !  */	
    returnle;
    	}
    Ma persistance est injectée de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class ConnectionEntityManager {
    
    
    	private static EntityManagerFactory emf;
    @PersistenceContext(unitName = "myPU")
    	private static EntityManager em;
    
    
    	final static Logger logger = LogManager.getLogger(ConnectionEntityManager.class);
    
    
    /**
    	 * Méthode qui va nous retourner notre instance et la créer si elle n'existe
    	 * pas...
    	 * 
    	 * @return
    	 */
    	public static EntityManager getInstance() {
    		if (em == null) {
    			emf = Persistence.createEntityManagerFactory("myPU");
    			em = emf.createEntityManager();
    logger.info("----- Create Entity Manager ");
    		} 
    returnem;
    	}
    }
    J'appelle ensuite depuis le client un ejb qui me retourne le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    
    @Stateless
    public class MySessionBean implements MySessionBeanRemote, MySessionBeanLocal, Serializable {
    
    
    public List<Eleve> listeEleves() {
           return DAOFactory.getEleveDAO().listEleves();
    
    
    }
    Si je modifie mes données directement dans la bd, ma liste n'est pas actualisée. Aucune idée pourquoi.

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    JPA (ou plutôt le provider) peut effectivement gérer plusieurs niveaux de cache. Pour le L1, pas de soucis, c'est géré par l'entity manager et sert à garder les instances de la session courante.

    Par contre, le L2 lui, cache des instances entre plusieurs sessions. Pour hibernate, on peut le désactiver comme ça:

    persistence.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <properties>
        ...
        <property name="hibernate.cache.use_second_level_cache" value="false"/>
        ...
    </properties>
    Pour les autres providers, il faut regarder dans la doc.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il faudrait savoir quelle implémentation de JPA tu utilises, Hibernate et Toplink ne fonctionnent pas de la même façon sur le cache L2.
    Et quelle version également...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 109
    Par défaut
    J'ai essayé pas mal de trucs qui figurent sur ce lien, sans succès !

    https://docs.oracle.com/javaee/6/tut...doc/gkjjj.html

    Quelqu'un aurait-il une solution ?

    merci

Discussions similaires

  1. netbeans: génération de la bd après création des entités jpa
    Par lamabalo dans le forum Persistance des données
    Réponses: 0
    Dernier message: 07/10/2008, 20h55
  2. où insérer le code des entités jpa
    Par cool dans le forum JPA
    Réponses: 4
    Dernier message: 24/04/2008, 17h25
  3. Initialisation des Entités JPA
    Par bouba dans le forum JPA
    Réponses: 2
    Dernier message: 27/09/2007, 18h09
  4. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  5. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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