0
我发现没有被高速缓存,使一个非常简单的查询,如查询与内部对象在Hibernate中
Session s = sessionFactory.getCurrentSession();
List<Mod> list = s.createQuery("from Mod m where m.modNameShort=:modName")
.setParameter("modName", modName)
.setCacheable(true)
.list();
缓存很好。
但缓存不工作的一个一对多的选择,像这样:
List<ModVersion> list = s.createQuery("select m.modsVersionses from Mod m")
.setCacheable(true)
.list();
,也仍然感到对第二个及以后的调用请求DB。
我
props.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EhCacheProvider");
props.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
props.setProperty("hibernate.cache.use_second_level_cache", "true");
props.setProperty("hibernate.cache.use_query_cache", "true");
factoryBean.setHibernateProperties(props);
,以及国防部物体看起来像
@Entity
@Table(name = "mods", catalog = "artfunpw")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Mod implements java.io.Serializable {
***
@OneToMany(fetch = FetchType.LAZY, mappedBy = "mods")
@OrderBy("ReleaseDate desc")
public Set<ModVersion> getModsVersionses() {
return this.modsVersionses;
}
***
的ModVersion物体看起来像
@Entity
@Table(name = "mods_versions", catalog = "artfunpw", uniqueConstraints = @UniqueConstraint(columnNames = "VersionNumber"))
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class ModVersion implements java.io.Serializable {
如何启用缓存对于这种一对多疑问?
谢谢!
尝试增加'@在'OneToMany'方法Cache'注释即,'getModsVersionses' –