-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Hibernate EhCache criteria
PostPosted: Wed Apr 17, 2013 10:11 am 
Newbie

Joined: Wed Apr 17, 2013 9:56 am
Posts: 5
Bonjour, il y a un point que je ne comprends pas très bien dans hibernate au niveau du cache des requêtes :
J'ai une classe en relation ManyToMany avec trois autres classes, en gros Pays, Service et Composant et donc des collections que j'ai mis en mode Lazy. Quand je charge un pays avec une requête Criteria et un mode FetchMode.JOIN pour les collections, enfin de faire un unique select en base, Hibernate ne met en cache que le pays, et pas les collections. Par contre, quand j'enlève le mode Lazy, Hibernate met bien le pays et les collections en cache.
Code:
public class Pays implements Serializable{
private static final long serialVersionUID = -8767337896773261244L;
/**
* the id of the country
*/
private long id;

/**
* name of the country
*/
private String nom;
/**
* The region of the country
*/
private Region region;
/**
* Relations between a country and a composant
*/
private Set<PaysComposants> pc = new HashSet<PaysComposants>(0);
/**
* Relations between a country and a service
*/
private Set<PaysServices> ps = new HashSet<PaysServices>(0);
/**
* Relations between a country and some keys figures
*/
private Set<KeyFigure> kf = new HashSet<KeyFigure>(0);


J'ai mis en place une couche DAO et une couche de service qui accède à ce DAO
Code:
@Override
public Pays read(String nomPays) {
    Criteria criteria = super.getSession().createCriteria(Pays.class);
    criteria.setFetchMode("pc", FetchMode.JOIN);
    criteria.setFetchMode("ps", FetchMode.JOIN);
    criteria.setFetchMode("kf", FetchMode.JOIN);
    criteria.add(Restrictions.eq("nom", nomPays));
    criteria.setCacheable(true);
    Pays p=(Pays) criteria.uniqueResult(); 
    return p;   }


Comme vous pouvez le voir, j'ai bien mis la requête en cache, et sur chaque classe et chaque collection aussi, j'ai mis cette annotation
Code:
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
.
Voici mon fichier de cache
Code:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
monitoring="autodetect" dynamicConfig="true">

<defaultCache maxElementsInMemory="100000" eternal="false"
    timeToIdleSeconds="3600" timeToLiveSeconds="3600" overflowToDisk="true" />

<cache name="org.hibernate.cache.internal.StandardQueryCache"
    maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="3600"
    timeToLiveSeconds="3600">
</cache>

<cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
    maxElementsInMemory="10000" eternal="true">
</cache>

et mon fichier des propriétés hibernate où j'ai activé le cache de second niveau et le cache des requêtes :
Code:
<property name="hibernateProperties">
         <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="current_session_context_class">thread</prop>
            <prop key="hibernate.cache.use_query_cache">true</prop>
            <prop key="hibernate.cache.use_second_level_cache">true</prop>
            <prop key="hibernate.cache.use_structured_entries">true</prop>
            <prop key="hibernate.cache.generate_statistics">true</prop>
            <prop key="hibernate.cache.provider_class">
               org.hibernate.cache.EhCacheProvider
            </prop>
            <prop key="hibernate.cache.region.factory_class">
               org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
            </prop>
            <prop key="hibernate.cache.provider_configuration_file_resource_path">
               applicationContext-ehCache-entity.xml
            </prop>

         </props>
      </property>


Merci de m'aider


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.