9
votes

Comment désactiver complètement la mise en cache hibernate? (avec le printemps 3, hibernation avec des annotations)

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.

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?


0 commentaires

3 Réponses :


12
votes

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 , toutes les lignes qui font référence au cache de second niveau. Par exemple: xxx


2 commentaires

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 Stackoverflow.com/questions/3943366/... , Spring peut activer rinçage impatient du cache du premier niveau, qui obtiendrait effectivement le même résultat.



-1
votes

vous pouvez utiliser allemblests.put ("javax.persistence.cache.retrievemode", Cachertrievievemode.bypass); dans votre méthode persist (), cela peut fonctionner.


0 commentaires

2
votes

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;
    }


0 commentaires