hibernate中的简单查询需要花费很多时间

时间:2014-11-11 19:51:07

标签: java hibernate delay

我在java中有以下语句,调用500次,大约需要5分钟才能完成:

List<Items> itemList =  session.createCriteria(Items.class)
    .add(Restrictions.eq("id", itemID))
    .setCacheable(true).setCacheRegion("query.DBMSItems")
    .list();

我设置了配置:

<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>

并在缓存中:

<cache
    name="query.DBMSItems"
    maxElementsInMemory="500000"
    eternal="false"
    timeToIdleSeconds="6000"
    timeToLiveSeconds="60000"
    overflowToDisk="false"
    statistics="true" />

因此看起来缓存不起作用。

对于为什么会发生这种情况的任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:0)

在二级缓存中,您将查询缓存为关键字,将结果缓存为值。如果您将使用不同的参数执行查询,则每个查询将首先针对数据库执行并花费所需的时间,然后它将返回值并将正确的键值对存储在缓存中,并在几次调用时查询具有相同的参数然后它将转到二级缓存。

更好的解决方案是首先缓存数据,然后对缓存中的数据执行查询。

答案 1 :(得分:0)

500个项目的5分钟非常慢......在进行缓存之类的解决方法之前,找到根本原因会更好。尝试描述您的应用程序,我推荐YourKit。