Java 如何使用HibernateEhcache缓存列表
我在我的web应用程序中使用HibernateEHCacheJava 如何使用HibernateEhcache缓存列表,java,spring,hibernate,caching,ehcache,Java,Spring,Hibernate,Caching,Ehcache,我在我的web应用程序中使用HibernateEHCache model.put("projecttype",sessionfactory.getCurrentSession().createCriteria(TblProjectType.class).list()); System.out.println("Fetch Count="+ stats.getEntityFetchCount()); System.out.println("Second Level
model.put("projecttype",sessionfactory.getCurrentSession().createCriteria(TblProjectType.class).list());
System.out.println("Fetch Count="+ stats.getEntityFetchCount());
System.out.println("Second Level Hit Count="+ stats.getSecondLevelCacheHitCount());
System.out.println("Second Level Miss Count="+ stats.getSecondLevelCacheMissCount());
System.out.println("Second Level Put Count="+ stats.getSecondLevelCachePutCount());
EHCACHE.xml
<cache
name="com.uniphore.timesheet.domain.TblProjectType"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="true" statistics="true"/>
TblProjectType table has 5 rows only.
我的电子课堂:
@Entity
@Table(name="tblProjectType")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Repository
public class TblProjectType implements java.io.Serializable {
private static final long serialVersionUID = -1798070786993154681L;
@Id
@GeneratedValue
@Column(name ="ID")
private short id;
@Column(name ="TypeName")
private String typeName;
@Column(name="CreatedDate")
private Date createdDate;
@Column(name="ModifiedDate")
private Date modifiedDate;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "tblProjectType", cascade = CascadeType.ALL)
private Set<TblStage> tblStages = new HashSet<TblStage>(0);
@OneToMany(fetch = FetchType.LAZY, mappedBy = "tblProjectType", cascade = CascadeType.ALL)
private Set<TblProject> tblProjects = new HashSet<TblProject>(0);
//getters and setters
}
@实体
@表(name=“tblProjectType”)
@缓存(用法=缓存并发策略。非严格读写)
@存储库
公共类TblProjectType实现java.io.Serializable{
私有静态最终长serialVersionUID=-1798070786993154681L;
@身份证
@生成值
@列(name=“ID”)
私人短id;
@列(name=“TypeName”)
私有字符串类型名;
@列(name=“CreatedDate”)
私人日期创建日期;
@列(name=“ModifiedDate”)
私人日期修改日期;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“tblProjectType”,cascade=CascadeType.ALL)
私有集tblStages=新哈希集(0);
@OneToMany(fetch=FetchType.LAZY,mappedBy=“tblProjectType”,cascade=CascadeType.ALL)
私有集tblProjects=新哈希集(0);
//接球手和接球手
}
每次put计数增加11。但没有其他值更改。为什么二级缓存不命中
为什么每次都执行查询而不是从二级缓存获取结果
为什么第二级put计数在我点击它应该更新而不是插入的同一个查询时增加?
任何帮助都将不胜感激 试试两件事
@Entity
@Table(name="tblProjectType")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region="yourcacheregion")
@Repository
public class TblProjectType implements java.io.Serializable {
}
model.put(“projecttype”,sessionfactory.getCurrentSession().createCriteria(TblProjectType.class)…可设置缓存(true.list())
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.generate_statistics" value="true"/>
@madhesh此模型在这里做什么,以及如何缓存您的实体,QueryTBProject类型是我的实体类。我将该查询结果存储在缓存中。通过使用ehcache.xml,您是否已将TblProjectType实体标记为可缓存?发布您的TbProjectType类代码。@Andy Durfens,我已经将tblprojecttype标记为实体类。我已经在我的问题中发布了我的实体类。这很奇怪。我假设您同时启用了二级缓存和查询缓存。你也可以发布hibernate配置吗?是的,你的假设是正确的。但是我发现这个错误DummyPinnedKey不能被转换为org.hibernate.cache.QueryKey。我没有注意到你。什么时候出现错误?sessionfactory.getCurrentSession().createCriteria(TblProjectType.class).setCacheable(true).list()当尝试执行此查询时,我收到异常DummyPinnedKey无法转换为org.hibernate.cache.QueryKey未设置cacheable true时,您没有收到此异常?
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.generate_statistics" value="true"/>