@Entity
@Table(name="user_details")
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class UserDetails {...}
Le code ci-dessus est comment j'ai défini ma classe Entity, UserDetails, comme cacheable
. J'ai également ajouté deux lignes dans le hibernate.cfg.xml
:Hibernate cache de second niveau - Le programme ne se termine pas
<!-- second-level cache -->
<property name="cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
Dans ma méthode de service principal J'accède deux fois les mêmes UserDetails objet, dans différentes sessions:
session = sessionFactory.openSession();
session.beginTransaction();
UserDetails user = new UserDetails();
user = (UserDetails)session.get(UserDetails.class, 3);
logger.info(user);
session.getTransaction().commit();
session.close();
Session session2 = sessionFactory.openSession();
session2.beginTransaction();
UserDetails user2 = new UserDetails();
user2 = (UserDetails)session2.get(UserDetails.class, 3);
logger.info(user2);
session2.getTransaction().commit();
session2.close();
je reçois, comme prévu une seule SELECT
requête , ce qui implique que hibernate récupère les données du cache de second niveau. J'imprime aussi bien mes objets sur la console.
Mais, mon programme ne se termine pas. Il est là en cours d'exécution, sur Eclipse
, et je dois l'arrêter manuellement. Est-ce que je fais quelque chose de mal? Merci.
Merci beaucoup. Bonne journée. – yovan786