我使用的是Spring 3.1.1.RELEASE,JUnit 4.8.1和Hibernate 4.1.5.Final.我正在尝试测试我的二级缓存是否配置正确,但我不确定如何做到这一点.我正在使用JPA实体管理器,在Spring中配置如此......
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaDialect">
<bean class="org.collegeboard.springboard.core.jpa.HibernateJpaDialect">
<property name="flushMode" value="COMMIT"/>
</bean>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="persistenceXmlLocation" value="classpath:META-INF/test-persistence.xml"/>
<property name="persistenceUnitName" value="orgTestingDatabase"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sharedEntityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我已经配置了我的二级缓存...
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- Collect stats, this is for testing if the cache is working -->
<property name="hibernate.generate_statistics">true</property>
Run Code Online (Sandbox Code Playgroud)
如何在给定javax.persistence.EntityManager的情况下访问org.hibernate.stat.Statistics对象?显然,我需要以某种方式访问SessionFactory,但我无法找出适当的强制转换系列.
谢谢, - 戴夫
Q1:我是对的,只有这些供应商支持集群上的Hibernate L2缓存吗?
Q2:Hibernate L2缓存有什么替代品吗?(也许有些DB缓存?)
据我了解,L2缓存在使用实体的主键查找实体时非常有用。
但是,是否有一点用它来进行不基于主键的查询?例如:
SELECT p FROM Person p WHERE p.age > 18
Run Code Online (Sandbox Code Playgroud)
如果查询缓存不打开,将L2缓存是在所有什么用?
我们在一个性能不佳的系统中使用nHibernate 1.2.如果我们迁移到最新版本的nHibernate,会有一些性能提升吗?
总体而言,迁移到最新版本的nHibernate是一个好主意吗?
编辑:我想使用以下功能来提高性能.
1.二级缓存.2.加入表.3. MultiQuery批量查询.
migration nhibernate performance batch-file second-level-cache
我一直在浏览有关第二级高速缓存和查询高速缓存的休眠文档,并留下了有关第二级高速缓存与数据库同步的问题,反之亦然。每个会话都可以定义自己的缓存模式,例如NORMAL,GET,PUT和REFRESH。2L缓存<->数据库同步是否会在所有情况下发生?如果是,何时会确切发生?在此先感谢。
我已经检查了Jcache规范,我的理解是它在加载和从缓存中删除对象方面提供了更大的灵活性,但你必须编写自己的数据访问.
Hibernate L2缓存非常适合缓存来自RDBMS的数据,但在填充和驱逐方面提供的灵活性有限.
可以将两种功能中的最佳功能一起使用,以避免在Jcache实现中实现数据访问,例如可以满足两种规范的Ignite.
更精确的是,Ignite创建的单个缓存对象可以同时被视为Hibernate L2缓存和Jcache.
我想使用Jcache注释,并在需要时使用hibernate进行数据库操作
从我的sql日志文件中,我认为QueryCache的物理属性是由元素配置的:
<defaultCache
maxElementsInMemory="0"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
Run Code Online (Sandbox Code Playgroud)
甚至我将下面的元素添加到ehcache.xml中的另一个元素,从sql日志看来,QueryCache的物理属性仍然是由 元件.
<cache name="org.hibernate.cache.QueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
/>
Run Code Online (Sandbox Code Playgroud)
我只想在内存中启用QueryCache,同时默认禁用其他(在内存中).也许是.的名字属性元素不正确?我从书<>中复制它.或者,我应该使用其他元素吗?也许有一种元素?
谢谢.
hibernate ×6
java ×2
batch-file ×1
caching ×1
database ×1
ehcache ×1
ignite ×1
jcache ×1
jpa ×1
junit ×1
migration ×1
nhibernate ×1
performance ×1
query-cache ×1
spring ×1
xml ×1