Bonjour,
je cherche qq explications sur le fonctionnement du cache d'hibernate.
Mon problème est le suivant : je voudrais avoir un cache qui conserve l'ensemble de mes entitiés durant une requete server de mon site (pour un seul thread donc), de manière à ce que si je demande 1000X la même entité (même id), la requete prenne à peine plus de temps que si je la demande 1X.
Voici ma requête-test :
avec loopNumber = 1000, j'ai 6sec, avec loopNumber = 1, 0,071 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 PersonsService personsService = (PersonsService) PersistenceManager.getApplicationContext().getBean("PersonsService"); long date = new Date().getTime(); int loopNumber = 1000; PersonsEntity personsEntity = null; for (int i = 0; i < loopNumber; i++) { personsEntity = personsService.getByPrimaryKey(3); } System.out.println("TIME : " +(new Date().getTime() - date));
Donc, est-ce que le cache d'hibernate peut m'aider là dessus? Et comment puis-je l'activé?
Voici mon persistence.xml :
Et j'ai ajouté @Cacheable à mon entity.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="jpa_unit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <!-- 2nd level cache --> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" /> --> <!-- You can change this to create at the first time --> <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- Set this to 0 otherwise you sometimes get errors --> <property name="hibernate.connection.pool_size" value="1" /> </properties> </persistence-unit> </persistence>
Merci pour vos lumières !
Partager