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 :

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));
avec loopNumber = 1000, j'ai 6sec, avec loopNumber = 1, 0,071 ...

Donc, est-ce que le cache d'hibernate peut m'aider là dessus? Et comment puis-je l'activé?

Voici mon persistence.xml :

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>
Et j'ai ajouté @Cacheable à mon entity.

Merci pour vos lumières !