7
votes

Interrogation du cache hibernate

J'ai le code suivant:

Person a = new Person();
a.setName("John");

Session session = openHibernateSession();

session.beginTransaction();

session.saveOrUpdate(a);

Criteria critera = session.createCriteria(Person.class);
critera.add(Restrictions.eq("name","John"));
Person personFromCache = (Person) criteria.uniqueResult();

...

session.commit();


0 commentaires

5 Réponses :


1
votes

Si vous recherchez des autres que l'ID, Hibernate n'utilisera pas de cache de premier niveau. Hibernate Get and Load est lié au cache de premier niveau par défaut mais la requête de critère n'est pas. Dans votre cas, il y a deux solutions de mon côté

  1. par rinçage session = rincer simplement votre session comme ceci session.flush (); en faisant ainsi que les données de la session seront synchronisées à la base de données de la base de données générée et en tant que critère de résultat trouvera le résultat dans la base de données et vous donnera la liste.

  2. Activer le cache de deuxième niveau Hibernate = Vous pouvez activer le cache de deuxième niveau par des fournisseurs de cache Hibernate tels que EHCache et appliquer le tour.


0 commentaires

0
votes

Vous pouvez utiliser la session apatride mais être averti: Ces entités ne sont liées à aucune session et vous obtiendrez des exceptions si vous souhaitez résoudre les relations ou les champs paresseux!


0 commentaires

0
votes
session.beginTransaction();

session.saveOrUpdate(a);

session.flush();

Criteria critera = session.createCriteria(Person.class);
critera.add(Restrictions.eq("name","John"));
Person personFromCache = (Person) criteria.uniqueResult();

0 commentaires

0
votes

Nous faisons des choses similaires sauf en utilisant le cadre de test de test. Plusieurs des réponses discutent de l'appel de la méthode Session.Flush (). C'est correct. L'appel à Flush raconte à Hibernate de faire plusieurs choses, notamment en veillant à ce que toutes les appels de base de données attendent actuellement dans la file d'attente sont exécutées et effacées de la file d'attente.


0 commentaires

0
votes

Il renvoie des données même si vous sélectionnez sur la base du nom d'utilisateur. Il ne renvoie pas null.


0 commentaires