在我们的应用程序中,我们已将Hibernate配置为与EHcache一起使用。目的是,一旦将对象加载到Cache中,除非更改了对象,否则不应每次都调用db调用。
为了对此进行测试,我正在调用对象并打印对象的identityhashcode
[using call System.identityHashCode(this)
]。而且我注意到identityhashcode
对象在每次调用中都在变化,这使我们感到对象每次都在加载。
但是在日志中,我们看不到Hibernate对数据库进行任何sql调用。
如果我的测试正确与否,可以请人指导吗?
有很多事情可以解释差异。同样,不命中数据库也可能意味着您正在从会话缓存(也就是第一级缓存)中获取对象。确保在一个会话中创建该对象,然后在另一个会话中检索该对象两次(第一个会话可能命中数据库,第二个则不应)。
理想的情况是询问Hibernate是否从缓存中检索了对象。最简单的方法是启用统计信息收集,然后打印命中/未命中:
Statistics stats = sessionFactory.getStatistics();
stats.setStatisticsEnabled(true);
... // do your work
long hitCount = stats.getQueryCacheHitCount();
long missCount = stats.getQueryCacheMissCount();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句