Hi,
I have a simple table with about 450 rows. I am trying to cache this data. But evertime I do a q.lis() (list() on a query) an sql is generated. Why is the sql genrated every time I do list ? should it not get the data from the cache instead ?
I am have enable the cache in the mapping file, and I have the ecache file as
<cache name="net.idt.bct.db.vo.BctCountryRouteLocT"
maxElementsInMemory="5000"
eternal="false"
timeToIdleSeconds="600"
timeToLiveSeconds="1200"
overflowToDisk="false"
/>
It is taking about 10 to 12 seconds to query this data which is way too long in our case. And that was the reason I turned on the caching feature in hibernate and there not improvement in the performance.
Any ideas ? Any suggestions is greatly appreciated.
Hibernate version:
Hibernate verion 2.1.7
ehcache version 0.7
Mapping documents:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping package="net.idt.bct.db.vo">
<class name="BctCountryRouteLocT" table="BCT_COUNTRY_ROUTE_LOC_T" >
<cache usage="read-only" />
<id
column="COUNTRY_ROUTE_LOC_OID"
name="CountryRouteLocOid"
type="integer"
>
<generator class="vm" />
</id>
<property
column="COUNTRY"
length="60"
name="Country"
not-null="false"
type="string"
/>
<property
column="COUNTRY_CODE"
length="10"
name="CountryCode"
not-null="false"
type="string"
/>
<property
column="ROUTE_LOC"
length="60"
name="RouteLoc"
not-null="false"
type="string"
/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
Query q = sess.createQuery("from BctCountryRouteLocT");
q.setCacheable(true);
System.out.println("STIME="+new Date());
q.list();
System.out.println("ETIME="+new Date());
System.out.println("STIME="+new Date());
q.list();
System.out.println("ETIME="+new Date());
sess.close();
Full stack trace of any exception that occurs:
No Exception
Name and version of the database you are using:
Oracle 9i
The generated SQL (show_sql=true):
select bctcountry0_.COUNTRY_ROUTE_LOC_OID as COUNTRY_1_, bctcountry0_.COUNTRY as COUNTRY, bctcountry0_.COUNTRY_CODE as COUNTRY_3_, bctcountry0_.ROUTE_LOC as ROUTE_LOC from BCT_COUNTRY_ROUTE_LOC_T bctcountry0_
Debug level Hibernate log excerpt:
11:16:02,434 WARN CacheFactory:36 - read-only cache configured for mutable: net.idt.bct.db.vo.BctCountryRouteLocT
11:16:02,483 WARN CacheFactory:36 - read-only cache configured for mutable: net.idt.bct.db.vo.BctSwitchCarrierT
11:16:04,298 DEBUG CacheManager:177 - Creating new CacheManager with default config
11:16:04,303 DEBUG CacheManager:151 - Configuring ehcache from classpath.
11:16:04,307 DEBUG Configurator:118 - Configuring ehcache from ehcache.xml found in the classpath: file:/home/gkrishna/workspace/BCT/target/classes/ehcache.xml
11:16:04,325 DEBUG MemoryStore:124 - net.idt.bct.db.vo.BctCountryRouteLocT Cache: Using SpoolingLinkedHashMap implementation
11:16:04,327 DEBUG MemoryStore:104 - initialized MemoryStore for net.idt.bct.db.vo.BctCountryRouteLocT
11:16:04,328 DEBUG MemoryStore:124 - net.idt.bct.db.vo.BctSwitchCarrierT Cache: Using SpoolingLinkedHashMap implementation
11:16:04,328 DEBUG MemoryStore:104 - initialized MemoryStore for net.idt.bct.db.vo.BctSwitchCarrierT
11:16:04,329 DEBUG CacheManager:182 - Attempting to create an existing instance. Existing instance returned.
STIME=Thu Apr 21 11:16:06 EDT 2005
11:16:06,181 DEBUG SQL:237 - select bctcountry0_.COUNTRY_ROUTE_LOC_OID as COUNTRY_1_, bctcountry0_.COUNTRY as COUNTRY, bctcountry0_.COUNTRY_CODE as COUNTRY_3_, bctcountry0_.ROUTE_LOC as ROUTE_LOC from BCT_COUNTRY_ROUTE_LOC_T bctcountry0_
ETIME=Thu Apr 21 11:16:17 EDT 2005
STIME=Thu Apr 21 11:16:17 EDT 2005
11:16:18,077 DEBUG SQL:237 - select bctcountry0_.COUNTRY_ROUTE_LOC_OID as COUNTRY_1_, bctcountry0_.COUNTRY as COUNTRY, bctcountry0_.COUNTRY_CODE as COUNTRY_3_, bctcountry0_.ROUTE_LOC as ROUTE_LOC from BCT_COUNTRY_ROUTE_LOC_T bctcountry0_
ETIME=Thu Apr 21 11:16:29 EDT 2005
|