My Java App demande un serveur MySQL toutes les 10 secondes. J'insérer manuellement une nouvelle ligne dans une table. Hibernate ne peut pas le trouver. P>
Quand j'enveloppe manuellement une rangée, Hibernate montre que cette rangée existe. Je suppose que c'est à cause de la mise en cache hibernée. Y a-t-il un moyen de le désactiver du tout? P>
3 Réponses :
Vous voulez dire que le cache du premier niveau ou le cache de deuxième niveau? Ayant un Hibernate cache de second niveau tel que ehcache Ces entités caches qui correspondent aux lignes de la même table que vous modifiez manuellement pourrait causer le comportement que vous décrivez. Le cache du premier niveau ne causerait pas ce comportement et je ne pense pas que vous puissiez le désactiver, de toute façon.
Pour désactiver le cache de deuxième niveau Hibernate, supprimer du fichier de configuration Hibernate, Hibernate-CFG. XML code>, toutes les lignes qui font référence au cache de second niveau. Par exemple: p>
Salut Derek, merci ou tes réponses! HM, il semble que je n'ai pas la mise en cache de deuxième niveau, peut-être d'essayer de retirer le 1er niveau? Comment puis-je faire ceci?
Pour autant que je sache, vous ne pouvez pas désactiver le cache du premier niveau, mais selon
vous pouvez utiliser allemblests.put ("javax.persistence.cache.retrievemode", Cachertrievievemode.bypass); dans votre méthode persist (), cela peut fonctionner. P>
Afin de "essayer" de désactiver le cache de premier niveau, je l'expulsion à chaque fois qu'un EntityManager est demandé. travaillé pour moi;)
public EntityManager getEntityManager(){
if( emf == null ){
if (parameters == null) {
emf = Persistence.createEntityManagerFactory(persistenceUnitName);
} else {
emf = Persistence.createEntityManagerFactory(persistenceUnitName, parameters);
}
} else {
emf.getCache().evictAll();
}
EntityManager em = emf.createEntityManager();
return em;
}