package Text;import java.util.Date;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.stat.Statistics;import domain.IdCard;
import domain.person;import tool.HibernateUtil;public class One2One {
public static void main(String[] args) {
//add();
query(2);
 Statistics st=HibernateUtil.getSessionFactory().getStatistics();
System.out.println("put:"+st.getSecondLevelCachePutCount());
     System.out.println("hit:"+st.getSecondLevelCacheHitCount());      System.out.println("miss:"+st.getSecondLevelCacheMissCount());
}
static void add()
{
 Session s=null;
 Transaction tx=null;
 try{
 IdCard idCard=new IdCard();
 idCard.setTime(new Date());
 
 person person=new person();
 person.setName("p");
 
 person.setIdCard(idCard);
 idCard.setPerson(person);
 
 s=HibernateUtil.getSession();
 tx=s.beginTransaction();
 s.save(idCard);
 s.save(person);
 tx.commit(); }finally{ if(s!=null) s.close();}
}static void query(int id)
{    Session s=null;
  try{ s=HibernateUtil.getSession();
     person p=(person)s.get(person.class, id);
     System.out.println(p.getIdCard().getTime());
     p=(person)s.get(person.class, id);
     System.out.println("----------");
     System.out.println(p.getIdCard().getTime());
    }finally{ if(s!=null) s.close();}
    
    try{ s=HibernateUtil.getSession();
    person p=(person)s.get(person.class, id);
    System.out.println(p.getIdCard().getTime());
   
    
 }finally{ if(s!=null) s.close();}
}
}配置是:
Hibernage.cfg.xml<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>person.hbm.xml<cache usage="read-write"/> 结果是:
Hibernate: select person0_.id as id5_1_, person0_.name as name5_1_, idcard1_.id as id6_0_, idcard1_.time as time6_0_ from person person0_ left outer join id_card idcard1_ on person0_.id=idcard1_.id where person0_.id=?
2010-03-10 20:22:04.0
----------
2010-03-10 20:22:04.0
Hibernate: select idcard0_.id as id6_0_, idcard0_.time as time6_0_ from id_card idcard0_ where idcard0_.id=?
2010-03-10 20:22:04.0
put:0
hit:0
miss:0

解决方案 »

  1.   

    再给你垒个...你参考下这个就明白了.
    http://rujingzhang.javaeye.com/blog/219487
      

  2.   

    LZ你好.我也刚学Hibernate 我觉得你的二级缓存已经启动了
    你查询第二次的时候应该是 
    s2=HibernateUtil.getSession();
    p=(person)s2.get(person.class, id);
    这样你试试.. 
    效果应该能出来
      

  3.   

    8楼老兄 你的意思是再开启一个session 我试了 还是不行
    static void query(int id)
    {   {
    Session s=null;
      try{ 
      s=HibernateUtil.getSession();
         person p=(person)s.get(person.class, id);
         System.out.println(p.getIdCard().getTime());
         System.out.println("----------");
         p=(person)s.get(person.class, id);
         System.out.println(p.getIdCard().getTime());
        }finally{ if(s!=null) s.close();}
    }
    {Session s2=null;
         try{
          s2=HibernateUtil.getSession();
        person p=(person)s2.get(person.class, id);
        System.out.println(p.getIdCard().getTime());
       
        
     }finally{ if(s2!=null) s2.close();}
    }
    }
    老兄再给看看
      

  4.   

    2级缓存启用了不一定能查询到统计信息。要启用统计信息需要配置<property name="generate_statistics">true</property>