解决方案 »

  1.   


    当然我最后还得debug了一下
    Hibernate: select person0_.pid as pid0_0_, person0_.pname as pname0_0_, person0_.psex as psex0_0_ from Person person0_ where person0_.pid=?
    nan
    很明显这个person在session 关闭之后依旧存在,所以只向数据库进行一条插入语句,没有随着缓存的消失而不见。
    问题很明显了,缓存是随着session消失而消失的,缓存中的内容则不会随着缓存消失而消失。
      

  2.   

    我一直以来都是这样认为的:缓存不是内存,缓存你可以把它看成一个寄存器,对象在session关闭后 变为游离态,然后在内存中放着而已
      

  3.   

    我觉得你没有理解什么缓存。
    抛开hibernate不说,什么是缓存?是一种为了提高数据读取效率的一种介质。是介质,缓存的数据是拷贝而来的。你明白了这一点,再给你说你第二个问题,
    Person p1 =(Person)session.get(Person.class, 1L);
    这句代码,直接就持久化了p1对象,就是说执行了SQL查询,很明显你还没理解持久化的概念,
    说白了,持久化就是数据库有,sesison缓存也有。
    你已经用一个实体对象p1接受了你查询的对象,那么你下面打印当然有东西,你system语句打印的又不是你缓存的东西,可以说和你的缓存毫无关系啊。缓存本身就是拷贝来的数据,你打印的是你持久化的对象,二者毫不相干,明白了吧。