/ / SQLQuery dans Hibernate utilise-t-il le cache de session? - hibernation, mise en cache

SQLQuery dans Hibernate utilise-t-il le cache de session? - hibernation, mise en cache

Cet article de blog (référencé ici) indique que SQLQuery n’utilise pas le cache de session Hibernate. Cependant, a) il n’existe aucune preuve, b) ils n’utilisent pas SQLQuery.addEntity, ce qui pourrait fournir des informations permettant à Hibernate d’utiliser son cache.

Les docs ne mentionnez pas la mise en cache d’une manière ou d’une autre.

SQLQuery utilise-t-il le cache de session si j'utilise addEntity?

modifier: Cette section des docs dit:

Chaque fois que vous passez un objet à save (), update ()ou saveOrUpdate (), et chaque fois que vous récupérez un objet en utilisant load (), get (), list (), iterate () ou scroll (), cet objet est ajouté au cache interne du Session.

AddEntity () permet à list () de renvoyerobjets, cela implique qu'il utilise le cache. Comment puis-je vérifier? Ces mêmes documents indiquent qu'il existe une méthode "contient" pour le cache et que l'on peut parcourir le cache de second niveau, mais pas comment parcourir le cache de session.

Modifier # 2: En activant la journalisation des requêtes Hibernate, il ne semble pas que la mise en cache, mais certaines circonstances pourraient le rendre cache.

Réponses:

1 pour la réponse № 1

Je ne pense pas que la réponse de beny23 soit correcte. Je crois setCacheable se réfère à la mise en cache de second niveau et non au cache de session.

Pour vérifier si une entité est dans le cache de session, vous pouvez utiliser Session.contains(). Vous pouvez également faire un test rapide: récupérer l'entité, la modifier, fermer la session et voir si le mod est dans la base de données.


0 pour la réponse № 2

Selon les javadocs de SQLQuery, il prolonge le Query interface, qui fournit la setCacheable method (false par défaut), vous devriez donc pouvoir effectuer les opérations suivantes:

Query query = session.createSQLQuery(
"select * from my_table e")
.addEntity(MyEntityClass.class)
.setCacheable(true);

En outre, vous voudrez peut-être examiner la définition de la région de cache à l'aide du setCacheMode et setCacheRegion méthodes.