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 :(
avez-vous utilisé sur votre fichier' .hbm.xml'.? –
@Evgen Je ne vois aucun problème avec la configuration Pouvez-vous montrer la sortie de la console où vous voyez deux requêtes? –
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