2010-05-27 4 views
2

J'utilise eclipselink JPA avec une base de données qui est également mise à jour en externe à mon application. Pour cette raison, il y a des tableaux que je veux interroger toutes les quelques secondes. Je ne peux pas obtenir ce travail même lorsque j'essaie de désactiver le cache et le cache de requête. Par exemple:Désactiver la mise en cache eclipselink et la mise en cache des requêtes - ne fonctionne pas?

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default"); 
EntityManager em = entityManagerFactory.createEntityManager(); 

MyLocation one = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); 

Thread.sleep(10000); 

MyLocation two = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); 

System.out.println(one.getCapacity() + " - " + two.getCapacity()); 

Même si les changements de capacité alors que ma demande dort println imprime toujours la même valeur pour un et deux.

J'ai ajouté ce qui suit à la persistence.xml

<property name="eclipselink.cache.shared.default" value="false"/> 
<property name="eclipselink.query-results-cache" value="false"/> 

Je dois manquer quelque chose, mais je suis à court d'idées.

James

+0

Dans mon cas, les 2 propriétés que vous avez mentionné a résolu le problème. J'utilisais cependant une EntityManager portée par la demande. – Jarekczek

Répondre

3

Le problème est que vous lisez à travers le PersistenceContext/EM qui maintient un objet vue transactionnelles des données et ne sera jamais mise à jour à moins rafraîchi.

Ajoutez la propriété refresh de la requête "eclipselink.refresh" à l'appel find (JPA 2.0) ou appelez simplement em.refresh après la recherche initiale.

0
@Entity 
@Cache(shared=false) 
public class Employee { 
    ... 
} 

J'espère que cela permettra de résoudre votre problème de cache .........

Questions connexes