Hibernate問題-read-write緩存策略(出自王老師)

read-write是嚴格的讀取策略。在將一個對象放到緩存時,同時會加一把鎖。在當前session沒有關閉的情況下,其他session不可以訪問緩存中的同一個對象。真到此鎖定的session關閉。

@Test

    public void testUpdate(){

       Session s2 = HibernateUtils.openSession();

       Person p1 = (Person) s2.get(Person.class, "402881e4345a53ce01345a543b9a0004");

              System.out.println("第一次查詢"+p1);  //查詢獲取一個新的對象

       s2.clear();                        //將一級緩存中的數據清除

       boolean boo =                      //判斷二級緩存中,是否存在此對象,爲true

              HibernateUtils.getSessionFactory()

              .getCache()

              .containsEntity(Person.class,"402881e4345a53ce01345a543b9a0004");

       System.out.println("是否存在這個對象:"+boo);//true

       Person p2 = (Person) s2.get(Person.class, "402881e4345a53ce01345a543b9a0004");//read-writeg下爲什麼不查二級緩存

       System.out.println("同一個session第二次查詢"+p2);//使用同一個session查詢,結果因爲是read-write

                                                 //因爲對象已經上鎖,所以不會從二級緩存中返回數據

       //s2.close();                            //關閉或是不關閉

      

       System.out.println("上一個Session關閉以後");

      

       Session s3 = HibernateUtils.openSession();

       boo =

              HibernateUtils.getSessionFactory()

              .getCache()

              .containsEntity(Person.class,"402881e4345a53ce01345a543b9a0004");

       System.out.println("是否存在這個對象:"+boo);//true

       Person p3 = (Person) s3.get(Person.class, "402881e4345a53ce01345a543b9a0004");//read-write下,爲什麼這兒查二級緩存

       System.out.println(p3);

       s3.close();

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章