Hibernate二級緩存命中了為什么還是打印了SQL



public static void main(String [] args) {   
        for(int i=0;i<100;i++){
         dao.getObject(Article.class, 8);
        }
        Statistics st = HibernateSessionFactory.getSessionFactory().getStatistics();   
        System.out.println("輸出統計信息............");   
        System.out.println(st);   
        System.out.println("放入: "+st.getSecondLevelCachePutCount()+"次");
        System.out.println("命中: "+st.getSecondLevelCacheHitCount()+"次");
        System.out.println("失去: "+st.getSecondLevelCacheMissCount()+"次");
    }

這是源碼
打印的語句
Hibernate: select artcategor0_.id as id1_0_, artcategor0_.category as category1_0_ from artcategory 
。。。。。打印了100遍sql。。。。。
Hibernate: select artcategor0_.id as id1_0_, artcategor0_.category as category1_0_ from artcategory artcategor0_ where artcategor0_.id=?
輸出統計信息............
Statistics[start time=1280384598328,sessions opened=100,sessions closed=100,transactions=100,successful transactions=100,optimistic lock failures=0,flushes=100,connections obtained=100,statements prepared=101,statements closed=101,second level cache puts=1,second level cache hits=99,second level cache misses=1,entities loaded=101,entities updated=0,entities inserted=0,entities deleted=0,entities fetched=100,collections loaded=0,collections updated=0,collections removed=0,collections recreated=0,collections fetched=0,queries executed to database=0,query cache puts=0,query cache hits=0,query cache misses=0,max query time=0]
放入: 1次
命中: 99次
失去: 1次


為什么我命中了緩存還會打印sql,難道打印了SQL卻不執行數據庫而是直接從緩存取?
求高手解答下 謝謝

7 个解决方案

#1


我已經站過來了。等着一起看答案。

#2


我很苦惱,我想在站點內大量使用二級緩存,卻發現在大量打印sql。不知道到底有沒有從緩存中取

#3


沒有親愛的來回答嗎?

#4


自己頂

#5


dao.getObject(Article.class, 8);
 是不是這個方法打印的啊

#6


因為你是根據id查詢,所以查詢的順序是:
 1. 在一級緩存中查詢,如果一級緩存中,存在,則返回,否則, 2
 2. 在二級緩存中存在,則返回-此時應該會copy到一級緩存中的。,否則, 3
 3. 從數據庫中查詢,然后將結果放進緩存,再返回。
所以才會有: miss;1, put:1(第一次查詢的時候), hit:99(以后的查詢).

至於sql為什么打了100遍就不是特別清楚了:(
下面是一個介紹cache的文章,希望有用:
http://www.360doc.com/content/08/0131/10/51513_1017891.shtml

#7


該回復於2010-08-10 16:21:23被版主刪除

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com