你的那个p对象那时候还在托管状态,所以直接就能取属性的值你清不清缓存都没把人家那个p对象给没收了,p仍可用

解决方案 »

  1.   


    @Test
    public void testClear() {
    //clear cache
    ProgramerPK pk = new ProgramerPK();
    pk.setId(1);
    pk.setSid("123");
    Session session = getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Programer p = (Programer)session.load(Programer.class, pk);
    //This code will do select in database just once
    System.out.println(p.getName());
    //At this time do not execute SQL, Because data already in cache 
    Programer p2 = (Programer)session.load(Programer.class, pk);
    System.out.println(p2.getName());
    //Now release cache
    session.clear();
    Programer p3 = (Programer)session.load(Programer.class, pk);
    //Now cache is clean, Must execute SQL again
    System.out.println(p3.getName());
    session.getTransaction().commit();
    }
    这个测试应该这么写的!
      

  2.   

    http://blog.csdn.net/simon_steve_sun/article/details/5387636
    貌似load是4才有的吗?我也在学习中。