hibernate query by example 缓存
hibernate query by example caching
我有以下映射实体:
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "eKey-field-1", "eKey-field-2", "eKey-field-3" }))
class EntityMapped {
@Id
@GeneratedValue...
Long Id;
@Embedded
EntityKeyMapped eKey;
没有更新也没有删除。如果给定的 eKey 没有安全性,则会添加新记录。
select 查询非常简单,但每天最多并行执行 1+ Mln 查询(+有时会添加新记录)。所以我想以某种方式缓存它。
在 Dao 中,我看到类似的东西:
return (EntityMapped) getSession().createCriteria(EntityMapped.class).add(Example.create(example)).uniqueResult();
我正在考虑缓存此请求的最佳方式。我考虑的 atm :
return (EntityMapped) getSession().createCriteria(EntityMapped.class).add(Example.create(example)).setCacheable(true).uniqueResult();
但也许对于这种情况有更好(更简单)的缓存方式?
您正在以正确的方式启用缓存。这是Hibernate团队设计的方式。
如果您正在使用 spring(或 com.googlecode.ehcache.annotations 等),您可以通过在方法上添加注释来启用缓存。但是这将在休眠之外。
当使用纯休眠时,你的解决方案是正确的。
要记住的一件事是您可以启用缓存并设置适当的区域以使用:
return (SecurityMapped) getSession()
.createCriteria(SecurityMapped.class)
.add(Example.create(example))
.setCacheable(true)
.setCacheRegion("myregion") // here you can choose region
.uniqueResult();
然后在您的缓存提供程序配置文件中,您可以配置不同的区域。
例如,在 EhCache
配置中,您可以这样设置 "myregion"
:
<ehcache ...>
<cache name="myregion"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="7200"
overflowToDisk="false"
memoryStoreEvictionPolicy="LFU"/>
</ehcache>
我有以下映射实体:
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "eKey-field-1", "eKey-field-2", "eKey-field-3" }))
class EntityMapped {
@Id
@GeneratedValue...
Long Id;
@Embedded
EntityKeyMapped eKey;
没有更新也没有删除。如果给定的 eKey 没有安全性,则会添加新记录。
select 查询非常简单,但每天最多并行执行 1+ Mln 查询(+有时会添加新记录)。所以我想以某种方式缓存它。
在 Dao 中,我看到类似的东西:
return (EntityMapped) getSession().createCriteria(EntityMapped.class).add(Example.create(example)).uniqueResult();
我正在考虑缓存此请求的最佳方式。我考虑的 atm :
return (EntityMapped) getSession().createCriteria(EntityMapped.class).add(Example.create(example)).setCacheable(true).uniqueResult();
但也许对于这种情况有更好(更简单)的缓存方式?
您正在以正确的方式启用缓存。这是Hibernate团队设计的方式。
如果您正在使用 spring(或 com.googlecode.ehcache.annotations 等),您可以通过在方法上添加注释来启用缓存。但是这将在休眠之外。
当使用纯休眠时,你的解决方案是正确的。
要记住的一件事是您可以启用缓存并设置适当的区域以使用:
return (SecurityMapped) getSession()
.createCriteria(SecurityMapped.class)
.add(Example.create(example))
.setCacheable(true)
.setCacheRegion("myregion") // here you can choose region
.uniqueResult();
然后在您的缓存提供程序配置文件中,您可以配置不同的区域。
例如,在 EhCache
配置中,您可以这样设置 "myregion"
:
<ehcache ...>
<cache name="myregion"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="7200"
overflowToDisk="false"
memoryStoreEvictionPolicy="LFU"/>
</ehcache>