2016-03-09 4 views
1

Je suis coincé un peu et ne peux pas comprendre ce qui ne va pas avec ma configuration de cache de second niveau. fichier pomHibernate Le cache de second niveau ne fonctionne pas

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.11.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.11.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.36</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.11.Final</version> 
    </dependency> 
</dependencies> 

hibernate.cfg.xml:

<property name="show_sql">true</property> 
<property name="format_sql">true</property> 
<property name="use_sql_comments">true</property> 
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.max_size">100</property> 
<property name="hibernate.c3p0.timeout">1800</property> 
<property name="hibernate.c3p0.max_statements">50</property> 
<property name="hibernate.c3p0.idle_test_period">3000</property> 
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property> 
<property name="hibernate.cache.use_second_level_cache">true</property> 
<property name="hibernate.cache.use_query_cache">true</property> 
<property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property> 

fichier ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 

<defaultCache maxElementsInMemory="100" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="200" />  

<cache 
    name="version2Cache" 
    maxElementsInMemory="100000" 
    eternal="true" 
    overflowToDisk="false" 
    memoryStoreEvictionPolicy="LFU" 
    statistics="true" 
/> 
</ehcache> 

Entité:

@Entity 
@Table(name = "version") 
@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE,region="version2Cache") 
public class VersionData implements Serializable 
{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 7355281418627668744L; 

    @Id 
    @Column(name="VERSION_ID") 
    private String versionId; 



    /** 
    * user docname 
    */ 
    @Column(name = "DOC_NAME") 
    private String docName; 


    /** 
    * user versionModivied 
    */ 
    @Column(name = "VERSION_MODIFIED") 
    @Type(type = "timestamp") 
    @JsonIgnore 
    private Date versionModivied; 
    /** 
    * user zvitId 
    */ 
    @ManyToOne 
    @JoinColumn(name="ZVIT_ID") 
    private ZvitData zvitId; 

    @OneToMany(targetEntity=TermData.class, mappedBy = "versionId", cascade=javax.persistence.CascadeType.ALL, fetch=FetchType.LAZY) 
    private List<TermData> terms; 
//getters, setters, hashcode, equals 
} 

Et je lancer le test de

Et je vois dans la console qu'il y a en fait deux requêtes qui s'exécutent dans la base de données, mais avec un cache de deuxième niveau qui fonctionne, il devrait y en avoir un.

EDDITED: Merci Madhusudana Reddy Sunnapu. Mon erreur était que je n'ai pas lu le message de la console correctement :( Je n'ai pas mis en cache les objets incorporés et il semblait que la requête fonctionnait deux fois, mais la seconde fois, elle n'a pas vraiment chargé VersionData, mais a interrogé les objets incorporés. manqué. Désolé pour troublant. il est erreur vraiment stupide de mes :(

+0

avez-vous utilisé sur votre fichier' .hbm.xml'.? –

+1

@Evgen Je ne vois aucun problème avec la configuration Pouvez-vous montrer la sortie de la console où vous voyez deux requêtes? –

+0

J'ai déclaré l'utilisation du cache dans mon entité @Ca che (usage = CacheConcurrencyStrategy.READ_WRITE, region = "version2Cache"). Je n'ai pas d'autre endroit où je l'ai mis – Evgen

Répondre

0

vous devez ajouter ce contenu et faites une nouvelle tentative de test. Probablement vous obtenez votre réponse.

<ehcache> 
    .... 
    .... 
    //your Code 
    ..... 
    ..... 
    <cache name="package.Name.VersionData" 
     maxElementsInMemory="100" 
     eternal="false" 
     timeToIdleSeconds="5" 
     timeToLiveSeconds="200" /> 
    </ehcache> 
+0

J'ai essayé, mais ça n'a pas aidé. – Evgen