HibernateTest.java
代码:
/**
*
*/
package com.b510.examplex;
import org.hibernate.Session;
/**
*
* @author XHW
*
* @date 2011-7-15
*
*/
public class HibernateTest {
/**
* @param args
*/
public static void main(String[] args) {
new HibernateTest().getGuestbooks();
}
public void getGuestbooks(){
Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
session.beginTransaction();
Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);
//移除gb的缓存
session.evict(gb);
Guestbook gb2=(Guestbook)session.get(Guestbook.class, 2);
System.out.println(gb==gb2);
session.getTransaction().commit();
}
}
运行效果:
首先查出gb对象的数据,放入缓存中,当执行session.evict(gb);语句时,就会把
缓存中的数据移除掉。
这次要查gb2对象的数据,就得从新生成一条select语句。
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
false
测试二:
HIbernateTest.java
代码:
/**
*
*/
package com.b510.examplex;
import org.hibernate.Session;
/**
*
* @author XHW
*
* @date 2011-7-15
*
*/
public class HibernateTest {
/**
* @param args
*/
public static void main(String[] args) {
new HibernateTest().getGuestbooks();
}
public void getGuestbooks(){
Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
session.beginTransaction();
Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);
Guestbook gb2=(Guestbook)session.get(Guestbook.class, 3);
//清楚缓存,把缓存中的所有东西都给干掉,不留下任何东西
session.clear();
Guestbook gb3=(Guestbook)session.get(Guestbook.class, 2);
Guestbook gb4=(Guestbook)session.get(Guestbook.class, 3);
System.out.println(gb==gb3);
System.out.println(gb2==gb4);
session.getTransaction().commit();
}
}
运行效果:
我们看到session.clear();的执行效果果然是“心狠手辣”,不让敌人有丝毫反抗的有生力量……
这个方法会让缓存中的所有东西清除的干干净净。通通的,大大的,全部干掉的……
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
false
false
测试三:
HibernateTest.java
代码:
/**
*
*/
package com.b510.examplex;
import org.hibernate.Session;
/**
*
* @author XHW
*
* @date 2011-7-15
*
*/
public class HibernateTest {
/**
* @param args
*/
public static void main(String[] args) {
new HibernateTest().test();
}
public void test(){
Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
session.beginTransaction();
Guestbook gb=(Guestbook)session.get(Guestbook.class, 2);
Guestbook gb2=(Guestbook)session.get(Guestbook.class, 3);
//移除干净缓存中的数据
session.clear();
//判断gb2对象的是否在缓存中
System.out.println(session.contains(gb2));
//session.flush(); session刷新
//session.close(); session关闭
说明一下,在session执行下面的commit()方法后,会自动调用
flush()方法和close()方法。这两步是隐含在里面,所以不用显示出来
都是可以的。
session.getTransaction().commit();
}
}
运行效果:
session.contains(gb2);返回的是一个boolean值,判断缓存中是否缓存在gb2对象。
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
Hibernate:
select
guestbook0_.id as id0_0_,
guestbook0_.version as version0_0_,
guestbook0_.name as name0_0_,
guestbook0_.email as email0_0_,
guestbook0_.phone as phone0_0_,
guestbook0_.title as title0_0_,
guestbook0_.content as content0_0_,
guestbook0_.created_time as created8_0_0_
from
users.guestbook guestbook0_
where
guestbook0_.id=?
false